如何删除缺少日期日部分的指定格式文件(附Java代码求助)
解决方案
我来帮你搞定这个问题!核心思路是通过正则表达式精准识别出缺少「日」部分的错误格式文件,然后替换掉你代码里的contains("CW")判断逻辑,实现定向删除。
首先明确两种文件名的格式规则:
- 正确格式:
年-月-日_文件类型.后缀,对应正则:^\d{4}-\d{2}-\d{2}_.*\.\w+$ - 错误格式(需要删除):
年-月_文件类型.后缀,对应正则:^\d{4}-\d{2}_.*\.\w+$
下面是修改后的完整代码,我还补充了异常处理和空目录判断,让逻辑更稳定:
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.regex.Pattern; public class FileProcessor { // 用于匹配错误文件名的正则实例 private static Pattern invalidFileNamePattern; private void scanFolder(final String fileTypename, File currentFolder, File outputFolder) { System.out.println("Scanning folder [" + currentFolder + "]..."); // 初始化正则:匹配「年-月_xxx.指定后缀」的文件,自动转义后缀里的特殊字符 invalidFileNamePattern = Pattern.compile("^\\d{4}-\\d{2}_.*\\." + Pattern.quote(fileTypename)); File[] files = currentFolder.listFiles(); if (files == null) { System.out.println("Folder is empty or cannot be accessed: " + currentFolder); return; } for (File file : files) { if (file.isDirectory()) { scanFolder(fileTypename, file, outputFolder); } else { // 先检查是否是错误格式的文件,是的话直接删除原文件(可根据需求调整) if (invalidFileNamePattern.matcher(file.getName()).matches()) { System.out.println("Deleting invalid file: " + file.getName()); file.delete(); continue; } // 复制正确格式的文件到输出目录 copy(file, outputFolder); } } // 额外检查输出目录里的错误文件(如果复制过程中不小心带进去了) File[] outputFiles = outputFolder.listFiles(); if (outputFiles != null) { for (File f : outputFiles) { if (invalidFileNamePattern.matcher(f.getName()).matches()) { System.out.println("Deleting invalid file from output: " + f.getName()); f.delete(); } } System.out.println("Processing completed for output folder: " + outputFolder); } } // 完善文件复制方法,处理文件夹创建和IO异常 private void copy(File source, File outputFolder) { if (!outputFolder.exists()) { outputFolder.mkdirs(); } File dest = new File(outputFolder, source.getName()); try { Files.copy(source.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING); System.out.println("Copied file: " + source.getName()); } catch (IOException e) { System.err.println("Failed to copy file: " + source.getName() + ". Error: " + e.getMessage()); } } }
关键修改说明:
- 正则匹配逻辑:用
Pattern.quote()确保文件后缀里的特殊字符(比如.csv的点)被正确转义,避免正则匹配出错。 - 原目录清理:在复制文件前先判断格式,直接删除原目录里的错误文件(如果你的需求只需要清理输出目录,可以删掉这部分)。
- 稳定性优化:增加了空目录判断和IO异常捕获,避免程序意外崩溃。
- 输出目录二次检查:确保输出目录里不会残留错误格式的文件。
使用提示:
- 调用
scanFolder时,fileTypename传你的文件后缀(比如"txt",不要带点)。 - 测试前建议先备份文件,避免误删重要数据!
内容的提问来源于stack exchange,提问作者Khaaled
相关产品推荐
相关产品推荐

