我正在開發一個項目,其中一部分顯示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