我想从包含子目录的目录中读取10%的文件,并且想要在各个子目录中写入文件。我目前能够使用随机方法读取10%的随机文件并将其写入文件夹,但代码不适用于子目录。 我的代码是:
context:component-scan
'
答案 0 :(得分:0)
您将获得文件和文件夹,而不是使用列表文件使用列表。 对于String数组中的所有文件,请调用readSampleFiles方法。对于字符串数组中的每个文件夹重做,与主要的递归方式相同。
答案 1 :(得分:0)
我不知道这是否是您所需要的百分之百(问题不是很清楚)但我认为您可以使您的代码更清晰一些。
try {
List<Path> files = Files.list(Paths.get("path")).filter(path -> Files.isRegularFile(path)).collect(Collectors.toList());
int ten_percent = files.size()/10;
Collections.shuffle(files); //Randomize
files.stream().limit(ten_percent).forEach(source -> copyFile(source, Paths.get("newPAth").resolve(UUID.randomUUID().toString())));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
和copyFile方法(只是为了摆脱forEach中的异常):
private void copyFile(Path source, Path dest) {
try {
Files.copy(source, dest);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
现在应该将10%的文件复制到文件夹中。
如果您需要复制完整的目录,请不要在第一个流中使用过滤器并使用此方法:
private void copyDirectory(final Path sourcePath, final Path targetPath) throws IOException {
Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException {
Files.createDirectories(targetPath.resolve(sourcePath.relativize(dir)));
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
Files.copy(file, targetPath.resolve(sourcePath.relativize(file)));
return FileVisitResult.CONTINUE;
}
});
}