在Java中如何实现隐藏文件或者文件夹

时间:2020-01-09 10:35:30  来源:igfitidea点击:

在本文中,我们将介绍如何在Java中隐藏文件或者文件夹,以及如何在Java中取消隐藏文件。设置隐藏文件的属性是特定于操作系统的,并且没有统一的方法可以在使用Java的各种平台上实现。

在Unix中隐藏文件

在Unix或者Linux OS中,通过添加"."我们可以将其隐藏在文件的前面,因为可以使用Java程序重命名文件,因此新名称为"." + fileName。

检查此帖子使用Java程序重命名文件以查看用于重命名文件的Java程序。

在Windows中隐藏文件或者目录

为了使文件或者文件夹隐藏在Windows中,有两个选项。

  • 在Java 7之前,我们只能通过使用RunTime.getRuntime()。exec()方法(请参见示例)或者使用ProcessBuilder类(请参见示例)运行attrib命令来从Java程序中隐藏文件。
  • 从Java 7开始,我们可以使用Files类的setAttribute()方法来设置给定文件的隐藏属性。参见示例。

使用Java中的RunTime.getRuntime()。exec()方法隐藏文件

通过使用RunTime.getRuntime()。exec()方法,可以运行Windows命令" attrib"来设置文件的隐藏属性以使其隐藏。

  • Runtime.getRuntime()–返回与当前Java应用程序关联的运行时对象。
  • exec(String command)–在一个单独的进程中执行指定的string命令。
  • attrib –此命令用于设置或者显示文件或者目录的只读,归档,系统和隐藏属性。用于隐藏/取消隐藏文件的属性为+ H / -H
import java.io.File;
import java.io.IOException;

public class HideFile {
  public static void main(String[] args) {
    File file = new File("F:\theitroad\Parent\Test.txt");
    setHiddenAttrib(file);
  }
	
  private static void setHiddenAttrib(File file) {
    try {
      // execute attrib command to set hide attribute
      Process p = Runtime.getRuntime().exec("attrib +H " + file.getPath());
      // for removing hide attribute
      //Process p = Runtime.getRuntime().exec("attrib -H " + file.getPath());
      p.waitFor(); 
      if(file.isHidden()) {
        System.out.println(file.getName() + " hidden attribute is set to true");
      }else {
        System.out.println(file.getName() + " hidden attribute not set to true");
      }
    } catch (IOException | InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

如果要删除文件的hide属性,则可以对Runtime.getRuntime()。exec方法使用以下命令

"attrib -H " + file.getPath()

如我们所见,运行代码后,所传递文件的hidden属性设置为true。

使用ProcessBuilder类运行attrib命令

也可以使用Java中的ProcessBuilder类运行相同的attrib命令。我们可以使用命令和必需的参数创建列表,然后将其作为命令传递给ProcessBuilder实例。

public class HideFile {
  public static void main(String[] args) {
    File file = new File("F:\theitroad\Parent\Test.txt");
    setHiddenAttrib(file);
  }
	
  private static void setHiddenAttrib(File file) {
    try {
      List<String> cmdList = new ArrayList<String>();	    
      cmdList.add("attrib");
      cmdList.add("-H");
      cmdList.add(file.getPath());
      ProcessBuilder pb = new ProcessBuilder();
      pb.command(cmdList);
      Process p;		
      p = pb.start();
      p.waitFor();
    } catch (IOException | InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }         
  }
}

使用Java中的Files.setAttribute()方法隐藏文件

Files.setAttribute(路径,字符串属性,对象值,LinkOption…选项)–设置文件属性的值。

在该方法中,传递的参数是

  • path-文件的路径
  • attribute-要设置的属性
  • 值-属性值
  • options-选项,指示如何处理符号链接

attribute参数标识要设置的属性,格式为:

[视图名称:]属性名称

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.DosFileAttributes;

public class HideFile {
  public static void main(String[] args) {
    Path filePath = Paths.get("F:\theitroad\Parent\Test.txt");
    setHiddenAttrib(filePath);
  }
	
  private static void setHiddenAttrib(Path filePath) {		
    try {
      DosFileAttributes attr = Files.readAttributes(filePath, DosFileAttributes.class);
      System.out.println(filePath.getFileName() + " Hidden attribute is " + attr.isHidden());
      Files.setAttribute(filePath, "dos:hidden", true);
      attr = Files.readAttributes(filePath, DosFileAttributes.class);
      System.out.println(filePath.getFileName() + " Hidden attribute is " + attr.isHidden());
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 
  }
}

如果我们要删除文件的hide属性,则可以将false传递给hidden属性

Files.setAttribute(filePath, "dos:hidden", false);