Список файлов в Java. Свежий взгляд - PullRequest
0 голосов
/ 24 февраля 2012

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

public String[] getFiles(String initialDir) {}

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

.isDirectory()

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

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

и вот тут возникают проблемы.

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

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

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

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

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

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]);
}
1 голос
/ 24 февраля 2012

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

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

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

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

Если вам действительно нужно использовать массивы, и это по-прежнему не домашняя работа, тогда вы можете объединить два массива, используя Apache commons lang:

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

Выше было скопировано из ответа на Как объединить два массива в Java? , который дает вам все ответы, которые вы когда-либо захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...