Поиск по всему компьютеру по имени файла в Java - PullRequest
3 голосов
/ 29 июня 2009

Есть ли способ поиска по всему компьютеру значения String, представляющего имя файла в Java? Это было бы без знания названий дисков на компьютере.

Ответы [ 4 ]

6 голосов
/ 29 июня 2009

Вы можете перебирать файловую систему, просматривая имена файлов, получая содержимое, если это каталог, и т. Д. Рекурсивно.

Если камнем преткновения является то, как получить диски на компьютере, посмотрите на функцию File.listRoots (), чтобы получить список букв дисков.

ETA:

Чтобы быть абсолютно безопасным, вы захотите включить некоторые ограничения на рекурсивную обработку. В файловой системе могут быть циклы с символическими ссылками и тому подобное (особенно в LINUX / UNIX, но сторонние инструменты могут включить это и в Windows).

Чтобы убедиться, что вы не зацикливаетесь при работе с символическими ссылками, используйте методы File.getCanonicalPath, чтобы получить «реальный» путь для каталога и отслеживать все посещенные канонические пути. Вы также можете использовать getCanonicalFile и отслеживать все файлы, но это, вероятно, не нужно, если вы действительно не хотите избегать случайного случая, когда вы будете обрабатывать один и тот же файл дважды.

2 голосов
/ 29 июня 2009

Вы можете использовать объект File, чтобы определить, просматриваете ли вы файл или каталог:

File file = new File("/"); //root

Затем, когда вы повторяете (или выполняете итерацию в зависимости от ваших предпочтений), у вас есть простая проверка:

if(tempFile.isDirectory())
     //do recursive call on that directory
else
     //perform check on file name
1 голос
/ 29 июня 2009

Также не забудьте про исключения в рекурсивной обработке. Некоторые папки могут быть недоступны из-за ограничений прав доступа. Кроме того, системная папка Windows «Информация о томе системы» не может быть введена в проводнике Windows, поэтому я полагаю, что она вызовет исключение, если вы попытаетесь проникнуть внутрь программным способом.

0 голосов
/ 29 июня 2009

Вы можете использовать рекурсивный вызов через всю файловую систему: Вы можете использовать следующие методы: java.io.File:

  1. listRoots(): список корневых файлов (в Windows это диски, в Mac OS X и linux это '/').

  2. listFiles(): список прилагаемых файлов каталога

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