You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除缺少日期日部分的指定格式文件(附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());
        }
    }
}

关键修改说明:

  1. 正则匹配逻辑:用Pattern.quote()确保文件后缀里的特殊字符(比如.csv的点)被正确转义,避免正则匹配出错。
  2. 原目录清理:在复制文件前先判断格式,直接删除原目录里的错误文件(如果你的需求只需要清理输出目录,可以删掉这部分)。
  3. 稳定性优化:增加了空目录判断和IO异常捕获,避免程序意外崩溃。
  4. 输出目录二次检查:确保输出目录里不会残留错误格式的文件。

使用提示:

  • 调用scanFolder时,fileTypename传你的文件后缀(比如"txt",不要带点)。
  • 测试前建议先备份文件,避免误删重要数据!

内容的提问来源于stack exchange,提问作者Khaaled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:29:00