我只想要名字中包含固定模式的文件,但我的代码是复制所有文件。
我正在使用的代码是:{{1}}
对模式匹配有效的示例文件名:2 015.11.30.x 或 ivnr.stats
答案 0 :(得分:1)
每次使用
找到符合条件的文件名时,都会将整个源目录复制到目标目录FileUtils.copyDirectory(source, dest);
您需要复制单个文件,因为只应复制满足您条件的文件,并且不应对与该模式匹配的每个文件重复复制过程:
FileUtils.copyFileToDirectory(listOfFiles[i], dest);
答案 1 :(得分:1)
本声明
FileUtils.copyDirectory(source, dest);
是你的问题所在。此方法只是将源文件及其中的所有内容复制到dest目录。
相反,您只需要复制与您的模式匹配的文件。所以喜欢这个
if (filename.endsWith(".x") && filename.contains(pattern)){
try {
FileUtils.copyFileToDirectory(listOfFiles[i], dest) );
} catch (IOException e) {
e.printStackTrace();
}
}
希望这会有所帮助:)
答案 2 :(得分:0)
为什么在列出文件后对模式进行比较然后再次迭代只是使用List Files with filter过滤文件,并且满足条件的文件会复制它们。
在List files using pattern找到更多信息和帮助。
还有一点,为什么要使用FileUtils.copyDirectory
来复制文件,然后使用nio file copy。
示例代码:
File source = new File("Any Source file path");
File[] listOfFiles = source.listFiles(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
if(dir.isDirectory())//If you want to copy recursively to all sub-folders then return true and place proper checks
return false;
if(name satisfies my condition)
return true;
return false;
}
});
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFiles[i].isFile())
{
Path sourcePath=FileSystems.getDefault().getPath(listOfFiles[i].getPath());
Path target=FileSystems.getDefault().getPath(destinationPath);
Files.copy(sourcePath, target, java.nio.file.StandardCopyOption.REPLACE_EXISTING);
}
}