我认为如果我先解释一下情况会更好。
我正在撰写一些过滤Set
File
个{s}的软件。
过滤器如下:如果文件未隐藏,则将其添加到新Set
。
问题是File.isHidden()
的当前行为如下:
File f = new File("C:\Documents and Settings\Administrator\Local Settings\Temp\REG28E.tmp");
System.out.println(f.isHidden());
该程序将输出false
。
文件本身(REG28E.tmp
)实际上并未隐藏。而是隐藏了路径中的某个文件夹(Local Settings
)。
我想创建一些代码来检查:
如果隐藏了文件路径的某处,则该文件被标记为隐藏。
我想出了以下解决方案来递归检查文件的路径:
boolean hidden = file.isHidden();
File parentFile = file.getParentFile();
while ((hidden == false) || (parentFile != null)) {
hidden = parentFile.isHidden();
parentFile = parentFile.getParentFile();
}
if (!hidden) {
acceptedFileList.add(file);
}
最后,我们来解决问题。我永远无法进入我实际添加文件的阶段。问题是Java认为隐藏了C:\ drive 本身!
我该怎么做?
答案 0 :(得分:1)
我的猜测是你的状态需要&&
运算符而不是||
(它可能会导致一些NPE)。
尝试:
while (!hidden && (parentFile != null)) {...
答案 1 :(得分:1)
解决方案涉及添加手动检查以查看parentFile
对象是否是根目录。
while ((hidden == false) && (parentFile != null)) {
// added the IF statement below:
if (FileSystemUtils.isRoot(parentFile)) {
hidden = false;
break;
}
hidden = parentFile.isHidden();
parentFile = parentFile.getParentFile();
}
上面的代码使用了FileSystemUtils类。它包含以下方法:
public static boolean isRoot(File file) {
File[] roots = File.listRoots();
for (File root : roots) {
if (file.equals(root)) {
return true;
}
}
return false;
}
感谢所有插话的人......