我认为最好先解释一下情况。
情况
我正在写一些可以过滤Set
的File
的软件。
筛选器如下:如果未隐藏文件,则将其添加到新的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)) {...