У меня есть место, где хранится 3000 файлов. Но я хочу получить список из 1000 файлов за раз, а в следующий раз вызвать еще 1000 файлов и т. Д.
Пожалуйста, найдите мой код ниже:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FileSystem {
public static void main(String args[]) throws Exception {
FileSystem.createListFile();
FileSystem.getFileInBatch();
}
private static void getFileInBatch() {
int MAX_INDEX = 1000;
List<String> result = new ArrayList<>();
try (Stream<Path> walk = Files.walk(Paths.get("C://FileTest"))) {
List<String> batchResult = walk.filter(p -> Files.isRegularFile(p) && p.getFileName().toString().endsWith(".txt"))
.sorted(Comparator.comparingInt(FileSystem::pathToInt))
.map(x -> x.toString()).limit(MAX_INDEX).collect(Collectors.toList());
batchResult.forEach(System.out::println);
System.out.println(batchResult.size());
result.addAll(batchResult);
} catch (IOException e) {
e.printStackTrace();
}
}
private static int pathToInt(final Path path) {
return Integer.parseInt(path.getFileName()
.toString()
.replaceAll("Aamir(\\d+).txt", "$1")
);
}
private static void createListFile() throws IOException {
for (int i = 0; i < 3000; i++) {
File file = new File("C://FileTest/Aamir" + i + ".txt");
if (file.createNewFile()) {
System.out.println(file.getName() + " is created!");
}
}
}
}
Я могу получить первые 1000 файлов (от Aamir0.txt до Aamir999.txt) с использованием ограничения в потоках.
Теперь, как я могу получить следующие 1000 файлов (от Aamir1000.txt до Aamir1999.txt) партиями, а затем следующие 1000 файлы. Я ожидаю некоторых циклов, которые будут непрерывно давать 1000 упорядоченных файлов партиями.