2013-03-18 35 views
18

我想能夠列出當前目錄中的文件。我做了一些應該可以工作但不返回所有文件名的東西。如何列出當前目錄中的文件?

File dir = new File("."); 
File[] filesList = dir.listFiles(); 
for (File file : filesList) { 
    if (file.isFile()) { 
     System.out.println(file.getName()); 
    } 
} 

它返回.classpath,但我很確定我有這個文件夾中的其他java文件。也許當前文件夾的點符號不正確?

+1

*「我確信我有這個文件夾內的其他java文件」 *命名他們(這樣我們就可以更確定)。 – 2013-03-18 16:57:22

+1

我沒有看到你的代碼和你的輸出有什麼問題。 – Maroun 2013-03-18 16:57:46

+0

請提供一個類似工具的列表,例如windows上的dir或unix上的ls -l,以供比較。 – Ingo 2013-03-18 16:59:18

回答

8

也許當前文件夾的點符號不正確?

打印結果File.getCanonicalFile()檢查路徑。

任何人都可以向我解釋爲什麼src不是當前文件夾?

您的IDE在調用JVM時設置了類路徑。

E.G. (達到Netbeans)如果您選擇菜單File | Project Properties (all classes)您可能會看到類似的東西:

Netbeans project options

這是Working Directory是在這裏討論。

1

您應該確認new File(".")真的指向您認爲它指向 - .classpath提出了一些Eclipse項目的根....

+11

*「您應該......」*您應該對此作出評論。 – 2013-03-18 17:00:34

17

試試這個,來檢索文件夾,子文件夾內的所有文件

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       getAllFiles(f); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 

檢索文件/文件夾僅

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       System.out.println(f.getName()); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 
+0

我想這裏用戶說他想打印所有存在於當前目錄中的文件..不在子目錄中! – 2013-03-18 17:02:16

+0

感謝它的工作... – saman 2014-12-27 11:29:52

1

有一個快速四處窺探這一個,但是這看起來SH會工作。我還沒有測試過它。

File f = new File("."); // current directory 

    File[] files = f.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      System.out.print("directory:"); 
     } else { 
      System.out.print("  file:"); 
     } 
     System.out.println(file.getCanonicalPath()); 
    } 
0

你的代碼沒有問題。它應列出指定目錄直接包含的所有文件和目錄。

問題最有可能是以下中的一個:

  • "."目錄是不是你希望它是什麼。 "."路徑名實際上是指JVM的「當前目錄」或「工作目錄」。您可以通過打印出dir.getCanonicalPath()來驗證"."的實際目錄。

  • 您誤解了dir.listFiles()返回的內容。它不會返回dir下的樹中的所有對象。它只返回直接dir中的對象(文件,目錄,符號鏈接等)。

".classpath"文件表明,你正在尋找一個Eclipse項目目錄,和Eclipse項目通常在一個子目錄中的Java文件,如"./src"配置。我不希望在"."目錄中看到任何Java源代碼。


爲什麼SRC不是當前文件夾中任何人都可以解釋一下嗎?」

假設你正在啓動在Eclipse的應用程序,那麼當前文件夾默認到項目你可以通過Launcher配置嚮導中的一個面板來更改默認的當前目錄

+0

轉發我的其他評論,「我想我可能已經找到了問題,我假設當前目錄位於src文件夾(eclipse),但實際上點符號指向src之外的文件夾但是,src文件夾是我保存我的文件的文件夾 - 因此我認爲這將是當前文件夾。任何人都可以向我解釋爲什麼src不是當前文件夾?「 – Martynogea 2013-03-18 17:17:26

0

如果你編譯並運行你的代碼,你的代碼給出了預期的結果命令行)。在eclipse中,默認情況下每個項目的工作目錄都是項目目錄,這就是爲什麼你會得到這個結果。

您可以在java中設置user.dir來財產:

System.setProperty("user.dir", "absolute path of src folder"); 

然後它會給預期的結果。

+0

嗯...這是行不通的。在純Java中沒有辦法改變'new File(「。」)'的含義。 – 2013-03-18 17:33:59

+0

參考:http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java – 2013-03-18 17:38:45

0

我用我的本地答案與我的本地目錄(例如E://)它工作正常的第一個目錄和seconde目錄輸出產生了一個java空指針異常,找到原因後,我發現問題是通過隱藏的目錄中創建的,而這個目錄是由窗戶 創建來避免這個問題只需要使用這個

public void recursiveSearch(File file) { 
File[] filesList = file.listFiles(); 
    for (File f : filesList) { 
     if (f.isDirectory() && !f.isHidden()) { 
      System.out.println("Directoy name is -------------->" + f.getName()); 
      recursiveSearch(f); 
     } 
     if(f.isFile()){ 
      System.out.println("File name is -------------->" + f.getName()); 
     } 
    } 
} 
相關問題