gpt4 book ai didi

java - 为什么 Files.isHidden() 不能正常工作?

转载 作者:行者123 更新时间:2023-11-30 07:20:00 26 4
gpt4 key购买 nike

我正在摆弄 Java NIO,由于某种原因我无法让 Files.isHidden() 返回正确的 boolean 值。该程序只是检查目录是否隐藏,如果隐藏则使其可见,如果不隐藏则使其隐藏。这就是我所拥有的:

    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 类和 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();
}

最佳答案

正如评论中已经指出的, Files.isHidden 的文档状态:

The exact definition of hidden is platform or provider dependent. […] On Windows a file is considered hidden if it isn't a directory and the DOS hidden attribute is set.

虽然最后引用的句子已经解释了虽然它不会返回 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);

另请注意 FileSystems.getDefault().getPath(...) 的便捷方法 Paths.get(...)

关于java - 为什么 Files.isHidden() 不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com