【发布时间】:2020-08-22 10:44:10
【问题描述】:
我有一个存储 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 个有序文件。
【问题讨论】:
-
请看一下stackoverflow.com/questions/30641383/…这可能会有所帮助
-
会一直是 3000 个文件吗?
-
不,这将是大量文件。我试图先做 3000 个文件,所以我们可以做同样的事情
-
@AAMIRAZAM 好的。另外,你到底在列表中添加了什么?所有文件的路径?我很难理解你的代码。
-
@Schred:有一个位置存储了大量文件,比如说 4000 个文件。现在我想一次取出 1000 个文件并进行一些操作,然后选择接下来的 1000 个文件并进行一些操作,然后再选择接下来的 1000 个文件并进行操作。这将一直持续到我不会访问该位置的所有文件为止。
标签: java java-8 filesystems