Java 按名称和扩展名过滤文件

Java filter file by name and extension

我正在为我的公司开发一个 Java 小程序。 在这个程序中,我需要从我的本地文件夹中检索一些文件,但我需要通过前三个字符和扩展名来搜索文件。 阅读 java 文档,我看到 java.nio.file.Files 库存在,所以为了按名称和扩展名过滤文件,我看到有 startsWith()endsWith() 结构实现如下,所以我尝试使用它。

// recuperiamo tutti i file nella directory attuale e filtro per
// F4_*.cbi, CN_*.cbi, A4_*.cbi, Q4_*.cbi
dirFiles = new File("C:/www/htdocs/comune/F24_CT/deleghe_da_inviare_a_icbpi/");
listOfFiles = dirFiles.listFiles(new FilenameFilter() { 
    public boolean accept(File dirFiles, String filename) {
        return filename.startsWith("F4_");
    }
});

是否可以过滤各种文件名并将 endsWith 连接到 startsWith

我希望能够根据 startsWits("F24 _")startsWith("CN _")startsWith("A4 _")endsWith(".txt ").

条件按名称进行过滤

我接受任何提高我的知识和代码的意见或建议

您可以使用逻辑 AND 表达式 && 或正则表达式。

listOfFiles = dirFiles.listFiles(new FilenameFilter() {
    public boolean accept(File dirFiles, String filename) {
        boolean endsWith = filename.toLowerCase().endsWith(".txt");
        boolean startsWith = filename.startsWith("F4_") && filename.startsWith("CN_") && filename.startsWith("A4_") && filename.startsWith("Q4_");
        return startsWith && endsWith;
    }
});

如果您想使用正则表达式,它看起来像这样 (F4_|CN_|A4_|Q4_).*(\.txt|\.TXT)。 您可以查看此正则表达式的工作原理 here.

listOfFiles = dirFiles.listFiles(new FilenameFilter() {
    public boolean accept(File dirFiles, String filename) {
        return filename.matches("(F4_|CN_|A4_|Q4_).*(\.txt|\.TXT)");
    }
});

Make 很简单,拆分了 2 个规则,并使用逻辑运算符

boolean isValidStart = 
        filename.startsWith("F24_") || 
        filename.startsWith("CN_") || 
        filename.startsWith("A4_");
  
boolean isTxt = filename.endsWith(".txt");
            
return isValidStart && isTxt;