我搞乱了Java NIO,由于某种原因,我无法让Files.isHidden()返回正确的布尔值。该程序只是检查目录是否被隐藏,然后如果它被隐藏将使其可见,如果它不被隐藏,它将使其隐藏。这就是我所拥有的:
Path start = FileSystems.getDefault().getPath("E:/Documents/someDirectory");
try {
if (Files.isHidden(start)){
System.out.println("Dir is hidden.");
Files.setAttribute(start, "dos:hidden", false);
} else {
System.out.println("Dir is not hidden. Hiding.");
Files.setAttribute(start, "dos:hidden", true);
}
} catch (IOException e) {
e.printStackTrace();
}
尽管目录被隐藏,它仍然会返回false并隐藏目录。以下代码使用旧的File类w / Path类。
Path start = FileSystems.getDefault().getPath("E:/Documents/someDirectory");
File file = new File("E:/Documents/someDirectory");
try {
if (file.isHidden()){
System.out.println("Dir is hidden.");
Files.setAttribute(start, "dos:hidden", false);
} else {
System.out.println("Dir is not hidden. Hiding.");
Files.setAttribute(start, "dos:hidden", true);
}
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
正如评论中已经指出的那样,Files.isHidden
州的文件:
隐藏的确切定义是平台或提供者依赖。 [...]在Windows上,如果文件不是目录并且设置了DOS隐藏属性,则该文件被视为隐藏。
虽然最后引用的句子已经解释了虽然它没有返回Windows上目录的预期值,但我想强调第一句话。您正在使用负载平台/提供程序特定语义的方法,而您只想切换特定的,特定于平台的标记。
在这种情况下,你应该做到这一点,这也忽略了代码的条件:
Path start=Paths.get("E:/Documents/someDirectory");
boolean isHidden=(Boolean)Files.getAttribute(start, "dos:hidden");
System.out.println("Dir is "+(isHidden? "hidden. Showing.": "not hidden. Hiding"));
Files.setAttribute(start, "dos:hidden", !isHidden);
还请注意Paths.get(…)
的便捷方法FileSystems.getDefault().getPath(…)
。