как искать файл с ре в каталоге? - PullRequest
0 голосов
/ 21 апреля 2011

Я хочу найти файл в каталоге. Имя файла содержит некоторую строку, например 00012345, а полное имя должно быть XXXXXX_00012345_XXXXXX.PDF.

Нужно ли циклически просматривать каталог с именами файлов всех файлов, чтобы сравнить их имена? В моем каталоге много файлов, я не хочу делать это таким образом.

Plus: Каталог содержит миллионы файлов, все они в формате PDF. Мне нужен только один раз.

Ответы [ 5 ]

2 голосов
/ 21 апреля 2011

Вы можете делегировать это задание классу java.io.File, в нем есть несколько удобных методов для возврата списков файлов из каталогов, соответствующих некоторым критериям.

В вашем случае я бы реализовал FilenameFilter, который проверяет, соответствует ли имя файла вашим критериям и использует этот метод:

File[] files = directory.listFiles(new FileNameFilter() {
   @Override
   public boolean accept(File dir, String name) {
      return nameMatchesCriteria();  // to be implemented...
   }
});

с directory в качестве File объекта.

1 голос
/ 21 апреля 2011

Существуют различные удобные методы / библиотеки, которые помогут вам сделать это, как описано в других ответах. Однако на некотором уровне все они влекут за собой чтение всех записей каталога и сравнение имен с вашим шаблоном.

Почему?

Потому что это API, который типичная операционная система обеспечивает для такого рода вещей. Если вам нужно проверить миллионы имен файлов, это неизбежно будет медленным.


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

1 голос
/ 21 апреля 2011

Реализуйте java.io.FilenameFilter проверки на правильное расширение (String.endsWith()) и наличие другой целевой строки (String.indexOf()), затем передайте ее File.listFiles(FilenameFilter).File в этом случае указывает на интересующий каталог.

0 голосов
/ 26 декабря 2011

FileUtils из commons.io предоставляют прямой API для рекурсивного поиска.

FileUtils.listFiles (,,);

например.

String extensions = {"pdf", "xml"};
bool recursiveSearch = true;
File dir = new File("<path of directory to be searched>");
Collection searchResult = FileUtils.listFiles(dir , extensions, recursiveSearch );

searchResult будет содержать все наборы файлов, которые рекурсивно ищутся из данного каталога до его рекурсивной глубины.

0 голосов
/ 21 апреля 2011

Если вам требуется рекурсивный поиск, Apache Commons-IO FileUtils отлично справляется с listFiles (каталог файлов, IOFileFilter fileFilter, IOFileFilter dirFilter)

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