我认为最好先解释一下情况。

情况

我正在写一些可以过滤SetFile的软件。

筛选器如下:如果未隐藏文件,则将其添加到新的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:\驱动器本身是隐藏的!

我该怎么办?

最佳答案

我的猜测是您的条件条件需要&&运算符而不是||(这可能会导致某些NPE)。
尝试:

while (!hidden && (parentFile != null)) {...

07-23 12:54