Мне нужно разработать сканер файлов в Java с помощью следующих опций/параметров:Glob понимание
- Один каталог
- один или более шаблон * .xml, * .txt, * test.csv
- Переключатель для рекурсивного
Я думаю, что лучше всего было бы что-то вроде этого:
public class FileScanningTest {
public static void main(String[] args) throws IOException {
String directory = "C:\\tmp\\scanning\\";
String glob = "**/*.xml";
Boolean rekursiv = false;
final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:"+glob);
Files.walkFileTree(Paths.get(directory), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
}
Я не понимаю, почему я должен поставить «** /» перед моим фактическим рисунком. Также это делает сканирование рекурсивным. Если я удалю ** /, приложение больше ничего не находит.
https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob говорит, что ** означает рекурсивный, но почему это не работает, если я удалю это?
Может ли кто-нибудь дать мне подсказку?
Спасибо всем и имеет хорошие выходные
Спасибо. Это работает и на платформах Windows. Но как я могу отключить рекурсивное сканирование? У нас есть возможность отключить рекурсивное сканирование. И есть ли способ иметь несколько разных моделей одновременно? – Hauke
@ Hauke Да. Чтобы отключить рекурсивное сканирование, все, что вам нужно, это вариант от пользователя, например. 'args [0]', и вы можете использовать несколько разных шаблонов с регулярным выражением. Я могу показать вам или вы можете задать новый вопрос. Я могу обновить код, который я разместил в соответствии с вашими спецификациями. Мне также нравится узнать, как это делается на Java (я делаю это много на C.) –
Если бы вы могли обновить свой код, это было бы здорово.Это всего лишь класс тестирования, но с логическим флагом «рекурсивный» было бы нормально, а не анализировать аргументы приложения. Спасибо за вашу помощь – Hauke