我正在开发一个项目,其中一部分显示JTable中某个目录中的所有文件,包括子目录。用户可以双击子目录以使用该新目录的内容来更新表格。但是,我遇到了一个问题。如何检查文件/目录是否为受保护的OS文件?
我的文件列表是用file.listFiles()生成的,它可以提取所有内容:隐藏文件,锁定文件,操作系统文件,整个工具包和堆栈,我无法访问所有文件。例如,我没有在“C:\ Users \ user \ Cookies \”或“C:\ ProgramData \ ApplicationData \”中读/写的权限。没关系,这不是关于如何获得这些信息的问题。相反,我不希望程序显示无法打开的目录。但是,我无法访问的目录和我所做的目录几乎完全相同,这使得将它们过滤出来非常困难。
我发现行为的唯一区别是,如果我调用一个锁定的目录上的listFiles(),它将返回null。 下面是我使用的过滤器的代码块:
for(File file : folder.listFiles())
if(!(file.isDirectory() && file.listFiles() == null))
strings.add(file.getName());
其中“文件夹”是我期待中的目录和“串”是在该目录中的文件名列表。这个想法是一个文件只有被加载到列表中,如果它是允许编辑的文件或目录。过滤方面工作,但有一些目录包含数百个子目录,其中每个包含数百个以上的文件,并且由于listFiles()是O(n),这不是一个可行的解决方案(list()isn'或者更好)。
然而, file.isHidden()返回false
canWrite()/的CanRead()/ canExecute()返回true
的getPath()返回同getAbsolutePath()和getCanonicalPath()
createNewFile()对于所有内容都返回false,即使我知道的目录都可以。另外,这是我真正想避免的解决方案,即使这种解决方案有效。
是否有一些方法或实现我只是不知道如何帮助我查看该目录是否可访问,而无需解析其所有内容?我运行的是Windows 7 Professional,我使用的是Eclipse Mars 4.5.2,File的所有实例都是java.io.File)。
如果您想要执行准确的文件系统对象操作,请将'File'忘记并使用JSR 203。更多细节[here](http://java7fs.wikia.com/wiki/Why_File_sucks)。 – fge
我是3500线。这有点晚了。不过谢谢,我一定会在下一个项目中检查一下。 –
问题是,你必须这样做。 '文件'不能这样做。期... – fge