2014-11-14 6 views
2

У меня есть небольшая проблема с получением списка файлов в моей таблице. Вот мой listFilesForFolder метод:Как получить путь к файлу таблицы 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

+0

что вы хотите сделать именно? почему вы используете таблицу, если вы всегда используете свой первый индекс? – vefthym

+0

Извините, мой плохой Я хочу получить все пути файлов в папке и поместить их в таблицу – Zielpak

ответ

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

ok, так как я могу установить значение элементов таблицы? – Zielpak

+0

обновил ответ. замените ваш цикл 'for' тем, что я там положил. –

+1

Я предполагаю, что блок if необходим, чтобы рекурсивно получить файлы подпапок. – vefthym

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 
Смежные вопросы