使用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.作者:樓蘭胡楊
本文版權歸作者和博客園共有,歡迎轉載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。

浙公網安備 33010602011771號