2012-09-02 77 views
0

基本上,我想要做的是從我的Windows機器的特定路徑中讀取所有文件,例如, 「C:\」。在將所有文件讀取到文件數組後,我在for循環中檢查文件是不是目錄。我也在過濾掉隱藏的文件。之後,我對2個數組列表中的每一個進行排序,如果當前目錄不是根目錄,則添加「../」並將所有內容寫入最終數組列表。Java - Windows 7讀取文件並將它們寫入列表

但問題是 - 這個java程序向我展示了比我更多的目錄,我想。因爲用於「C:\> dir」的windows cmd shell的輸出與我的java程序的輸出不同。

任何想法如何解決這個問題?

輸出的 「C:\> DIR」:

{ "PerfLogs", "Program Files", "Program Files(x86)", "Users", "Windows" } 

輸出這個java程序:

{ "Documents and Settings", "Dokumente und Einstellungen", "PerfLogs", "Program Files(x86)", "Program Files", "Users", "Windows", "pagefile.sys" } 

private void getFileBrowser(String dirPATH) { 
    ITEM_TEMP = new ArrayList<String>(); 
    PATH_TEMP = new ArrayList<String>(); 
    ITEM_TEMP.clear(); 
    PATH_TEMP.clear(); 

    currentWorkingDirectory = dirPATH; 

    File f = new File(dirPATH); 
    File[] files = f.listFiles(); 

    for(int i=0; i < files.length; i++) { 
     File file = files[i]; 

     if(file.isDirectory()) { 
      if(!file.isHidden() & !file.getName().startsWith("$")) { 
       PATH_TEMP.add(file.getPath()); 
       ITEM_TEMP.add(file.getName() + "/"); 
      } 
     } 
     else { 
      if(!file.isHidden()) { 
       PATH_TEMP.add(file.getPath()); 
       ITEM_TEMP.add(file.getName()); 
      } 
     } 
    } 

    Collections.sort(ITEM_TEMP); 
    Collections.sort(PATH_TEMP); 

    ITEM.clear(); 
    PATH.clear(); 

    if(!dirPATH.equals(rootDirectory)) { 
     ITEM.add("../"); 
     PATH.add(f.getParent()); 
    } 

    for(int i=0; i < ITEM_TEMP.size(); i++) { 
     ITEM.add(ITEM_TEMP.get(i)); 
    } 
    for(int i=0; i < PATH_TEMP.size(); i++) { 
     PATH.add(PATH_TEMP.get(i)); 
    } 
} 

回答

0

它看起來像Java代碼正在打印出每個文件(pagefile.sys應該隱藏在默認情況下系統)。你說過你想過濾掉隱藏的文件。

問題可能就出在這行:

if(!file.isHidden() & !file.getName().startsWith("$")) 

&是位AND運算符,你應該使用& & - 邏輯AND運算符。

+0

啊好的。有沒有一種JAVA方式來獲取cmd「dir」命令顯示的文件/目錄?或者我應該使用運行時選擇目錄? –

+0

有兩種方法。使用'exec'命令通過Java執行dir命令(見這裏http://www.java-samples.com/showtutorial.php?tutorialid=8)或者...學習什麼樣的文件/目錄' dir'顯示並修復你的代碼。當你用'&修復你的錯誤時,你可能會非常接近解決方案-dir默認情況下不會打印隱藏的文件。我不確定具有'startsWith(「$」)'的語句是否必要。您可以通過執行'dir /?'來閱讀dir幫助文件,可能會對您有所幫助。 – Wookie88

+0

看來,如果我使用「&」或「&&」沒有關係 - 沒有其他結果。也許我會稍後嘗試運行時方式。 PS:需要「startsWith(」$「)」命令來過濾掉「Windows」目錄中的某些文件夾。它們不會以「isHidden()」消失.. –

相關問題