2012-02-24 3 views
-1

Вопрос довольно прост, но мой мозг кипит: ((( Я знаю, что я должен рекурсивно функционировать, но я не могу организовать его правильно, , потому что меня ограничивают типы (это Requirment)Перечень файлов на Java. Свежий взгляд

public String[] getFiles(String initialDir) {} 

во-первых, в моем коде я получаю список файлов и каталогов InitialDir затем я иду через элементы и искать для каталогов с помощью

.isDirectory() 

, а затем я пытаюсь организовать рекурсию, что-то вроде:

String [] buf = getFiles(Filelist[i].toString()); 

и вот приходят проблемы.

Основная проблема заключается, определение размера полученных данных и выделение необходимого массив String [] типа и далее писать все рекурсию результатов и первого вызов результаты полученного массив String [] типа.

Это действительно меня раздражает, поэтому мне нужен свежий взгляд со стороны (возможно, кто-то поможет с кодом в функции).

Спасибо всем!

+2

Есть ли у вас вернуться 'String []', не могли бы вы вместо того, чтобы вернуть '' List ? Таким образом, вам не нужно знать, сколько предметов вам потребуется. – Peter

+0

Возможный дубликат: http: // stackoverflow.com/questions/2056221/recursively-list-files-in-java – assylias

+0

@Peter, no i не могу вернуть Список , если бы я мог, решение было намного проще – Helgus

ответ

3

Вы можете использовать список в теле вашего метода затем преобразовать его в массив:

public String[] getFiles(String initialDir) { 
    List<String> files = new ArrayList<String>(); 
    ... 
     files.add(aLovelyFile); 
    ... 
     String[] moarFiles = getFiles(aLovelyDirectory); 
     files.addAll(Arrays.asList(moarFiles)); 
    ... 
    return files.toArray(new String[0]); 
} 
+0

спасибо LOT !!!!! я пытался использовать коллекцию, но потом я потерял во мне собственный код и индексы ... – Helgus

1

Если это не домашнее задание, посмотрите на Apache Commons, в частности FileUtils#ListFiles:

находит файлы в заданной директории (и, возможно, его подкаталоги). Все найденные файлы фильтруются IOFileFilter. Если ваш поиск должен быть возвращен в подкаталоги, вы можете передать в каталогIOFileFilter для каталогов. Вам не нужно связывать файл DirectoryFileFilter (через логический И) с этим фильтром. Этот метод делает , что для вас.

Пример: Если вы хотите искать все директории под названием «Темп» вы передаете в FileFilterUtils.NameFileFilter («Темп»)

Это возвращает Collection<File>. Наверное, именно то, что вы хотите. Конечно, если вам нужно вернуть массив, используйте .toArray() в конце.

Если вы действительно должны использовать массивы, и это еще не домашнее задание, то вы можете объединить два массива, используя Apache Commons Lang:

String[] both = (String[]) ArrayUtils.addAll(first, second); 

выше был скопирован из ответа на How to concatenate two arrays in Java?, что дает вы все ответы, которые вы когда-либо захотите.

+0

Я действительно не думаю, что кто-то должен изобретать эти утилит. Итак, плюс 1 к предложению использования FileUtils. Конечно, домашняя каверна выдержала. :) – Pavan

Смежные вопросы