2014-11-14 42 views
2

我有一個小問題獲取我的表中的文件列表。這裏是我的listFilesForFolder方法:如何獲取文件路徑到表java java

class listFilesForFolder{ 

    public void listFilesForFolder(final File folder) { 
    String[ ] table = new String[5] ; 

    for (final File fileEntry : folder.listFiles()) { 
     if (fileEntry.isDirectory()) { 
      listFilesForFolder(fileEntry); 
      table[0] = fileEntry.getPath(); 
     } else { 
      System.out.println(fileEntry.getPath()); 
      System.out.println(table[0]); 
     } 
    } 
} 

給我:

/home/piotr/Pobrane/162372-1.jpg 
null 
/home/piotr/Pobrane/skype-4.3.0.37-suse.i586.rpm 
null 

我怎麼能填補我的表文件的路徑?

+1

您不會遞增數組索引。我錯過了什麼嗎? – yts 2014-11-14 17:51:24

+0

你想要做什麼?如果你總是使用它的第一個索引,你爲什麼要使用表格? – vefthym 2014-11-14 17:51:47

+0

對不起我的壞我想獲得文件夾中的所有文件的路徑,並將它們放在表 – Zielpak 2014-11-14 17:54:34

回答

1

簡單

fileEntry.isDirectory() 

將返回false所以它永遠不會滿足於

if (fileEntry.isDirectory()) 

的情況所以沒有table[0]值設置。

擺脫整個if-else塊,並與剛剛

table[0] = fileEntry.getPath(); // or whatever method you want to use to increment i 

int i = 0; 
for (final File fileEntry : folder.listFiles()) { 
    table[i++] = fileEntry.getPath(); 
} 
+0

好吧,我如何設置表格元素的值? – Zielpak 2014-11-14 17:58:08

+0

更新了答案。用我放在那裏的'for'循環替換掉。 – 2014-11-14 17:58:44

+1

我想如果需要遞歸獲取子文件夾的文件。 – vefthym 2014-11-14 18:01:21

1

我認爲你需要一個列表,而不是一個數組替換它。如果您不遞歸調用該方法,則會丟失子文件夾的所有文件。如果你想獲得的子文件夾的文件,使用這樣的事情:

public List<String> listFilesForFolder(final File folder) { 
    List<String> list = new ArrayList<>(); 

    for (final File fileEntry : folder.listFiles()) { 
    if (fileEntry.isDirectory()) { 
     list.addAll(listFilesForFolder(fileEntry)); //recursively call the same method to get the files of the subfolder 
    } else {    
     list.add(fileEntry.getPath()); //add the files of this folder to the list 
     System.out.println(fileEntry.getPath()); //prints only the files of all subfolders 
    }   
    } 
    return list; //returns all the files of this folder and all the files of its subfolders 
} 

如果你需要你的最終輸出是一個數組,而不是一個列表,那麼就改變這個列表中的數組,在方法您可以從中撥打listFilesForFolder,如下所示:

List<String> list = listFilesForFolder(intialFile); 
String[] table = new String[list.size()]; 
table = list.toArray(table); //the result as an array