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;
我正在为我的公司开发一个 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;