Поскольку File.list () отображает только все файлы в каталоге, я попытался использовать библиотеку nio Files.walkFileTree , Files.walk и Files.find , которые занимают больше времени, но более эффективны (например, перечисляют файлы в подкаталоге).
Я не могу найти, как перечислить только часть файлов в каталоге. Например, у меня более 10 тыс. Файлов, и перечисление их всех по одному может вызвать проблемы с памятью, поэтому я хотел бы работать только с 500 файлами и делать это снова, пока все не будет прочитано.
То, что я сейчас делаю, это:
List<String> result= new ArrayList<String>();
// try/catch
Stream<Path> stream = Files.find(path, maxDepth, (p, f) -> f.isRegularFile()) {
result= stream.filter(Files::isRegularFile).map(s -> s.toString()).collect(Collectors.toList());
То же самое с File.walk()
И
Files.walkFileTree(start, options, maxDepth, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs) throws IOException {
String fileName = filePath.getFileName().toString();
result.add(fileName);
return FileVisitResult.CONTINUE;
}
});
Я не могу найти варианты, которые бы сделали это, или способ не читать только часть всех файлов в каталоге. Первым параметром для этих функций является папка, с которой начинается чтение, а не файл, с которого начинается.