如何检查Java中是否存在带通配符的文件?
我有一个目录,里面的文件名为"a_id_XXX.zip"
。
如何根据id
和File dir
检查文件是否存在?
将FileFilter
( 匿名编码)传递到dir File
的listFiles()
方法,如下所示:
File dir = new File("some/path/to/dir"); final String id = "XXX"; // needs to be final so the anonymous class can use it File[] matchingFiles = dir.listFiles(new FileFilter() { public boolean accept(File pathname) { return pathname.getName().equals("a_id_" + id + ".zip"); } });
捆绑为方法,它看起来像:
public static File[] findFilesForId(File dir, final String id) { return dir.listFiles(new FileFilter() { public boolean accept(File pathname) { return pathname.getName().equals("a_id_" + id + ".zip"); } }); }
你可以称之为:
File[] matchingFiles = findFilesForId(new File("some/path/to/dir"), "XXX");
或者只是检查是否存在,
boolean exists = findFilesForId(new File("some/path/to/dir"), "XXX").length > 0
我创建了以a_id_123.zip,a_id_124.zip,a_id_125.zip,a_id_126.zip命名的zip文件,看起来工作正常,但我不确定它是否适合您。 如果存在上面列出的文件,则输出如下
- 找到了a_id_123.zip
- 找到了a_id_124.zip
- 找到了a_id_125.zip
-
找到了a_id_126.zip
public static void main(String[] args) { String pathToScan = "."; String fileThatYouWantToFilter; File folderToScan = new File(pathToScan); // import -> import java.io.File; File[] listOfFiles = folderToScan.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { fileThatYouWantToFilter = listOfFiles[i].getName(); if (fileThatYouWantToFilter.startsWith("a_id_") && fileThatYouWantToFilter.endsWith(".zip")) { System.out.println("found" + " " + fileThatYouWantToFilter); } } } }
这个解决方案概括了Bohemian的答案。 它使用正则表达式,并用Java 8 lambda表达式替换内部类。 感谢@Bohemian的原始实现。
import java.io.File; public class FileFinder { public static void main(String[] args){ File directory = new File("D:\\tmp"); String id = "20140430104033"; for (File f : findFilenamesWithId(id, directory)){ System.out.println(f.getAbsoluteFile()); } } /** Finds files in the specified directory whose names are formatted as "a_id_ID.zip" */ public static File[] findFilenamesWithId(String ID, File dir) { return findFilenamesMatchingRegex("^a_id_" + ID + "\\.zip$", dir); } /** Finds files in the specified directory whose names match regex */ public static File[] findFilenamesMatchingRegex(String regex, File dir) { return dir.listFiles(file -> file.getName().matches(regex)); } }
您可以使用apache WildCardFileFilter
另一个回答或尝试ant库。 以下是一个示例: http : //code.google.com/p/maven-replacer-plugin/source/browse/trunk/src/main/java/com/google/code/maven_replacer_plugin/include/FileSelector.java
Java 7对模式匹配(PathMatcher)和递归目录遍历(Files.walkFileTree())有很好的支持。 在原始问题的上下文中,Oracle Java文档中的这个页面是一个良好的开端:
查找文件: http : //docs.oracle.com/javase/tutorial/essential/io/find.html