使用Files.walk删除文件
摘要:使用Files.walk
删除指定文件名的文件。
使用Files.walk工具,递归判断指定目录中的常规文件路径名是否符合约定名称,如果满足条件就删除。
public class DelFile {
// 文件名在此集合就删除
private static Set<String> givenFileNames = new HashSet<>();
public static void main(String[] args) {
givenFileNames.add("更多课程联系微信:xxx.txt" );
givenFileNames.add("更多课程联系QQ:Wiener.txt" );
givenFileNames.add("微信:Wiener.png" );
givenFileNames.add("QQ:xxx.jpg" );
// 获取要批量重命名的文件目录
String path = "/Users/楼兰胡杨";
// 传false时只打印满足条件的文件,传true时删除
delByWalk(path, Boolean.FALSE);
// deleteFileByGivenName(path);
}
public static void delByWalk(String givenDirName, Boolean isDeleted) {
try (Stream<Path> givenPaths = Files.walk(Paths.get(givenDirName))) {
// 筛选出常规文件
List<String> result = givenPaths.filter(Files::isRegularFile)
//把path映射为路径名
.map(path -> path.toString())
// 筛选出符合条件的文件
.filter(fileName -> ifDeleted(new File(fileName), isDeleted))
.collect(Collectors.toList());
} catch (Exception e) {
System.out.println("--------");
}
}
/**
* 如果isDeleted=false时,可以正确打印文件名称。令isDeleted=true时,删除文件
* Java 8之前的方法
* @param file 文件
* @param isDeleted true 可以删除
*
*/
public static void deleteGivenFiles(File file, Boolean isDeleted) {
if (file.isDirectory()) {
// 如果是目录,就删除目录下所有的文件和文件夹
File[] files = file.listFiles();
// 遍历目录下的文件和文件夹
for (File f : files) {
// 如果是文件就删除
if (f.isFile()) {
ifDeleted(f, isDeleted);
} else if (file.isDirectory()) {
// 如果是文件夹就递归
deleteGivenFiles(f, isDeleted);
}
}
} else if (file.isFile()) {
ifDeleted(file, isDeleted);
}
}
private static boolean ifDeleted(File oneFile, Boolean isDeleted) {
String fileName = oneFile.getName();
if (givenFileNames.contains(fileName)) {
System.out.println("被删除的文件:" + oneFile.getPath());
if (isDeleted) {
oneFile.delete();
}
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
函数ifDeleted(File oneFile, Boolean isDeleted)
用于判断文件名是否符合预期,并根据isDeleted确认是否删除文件。通过对比可知,Java8的walk函数更简单,deleteGivenFiles很臃肿。
读后有收获,小礼物走一走,请作者喝咖啡。
Buy me a coffee. ☕Get red packets.
作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。