在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);