DrX*_*eng 8 java file wildcard
我有一个目录,里面是文件命名"a_id_XXX.zip".
如何检查文件是否存在给定id和File dir?
Boh*_*ian 17
将FileFilter(匿名编码)传递给listFiles()dir 的方法File,如下所示:
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");
}
});
Run Code Online (Sandbox Code Playgroud)
捆绑为方法,它看起来像:
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");
}
});
}
Run Code Online (Sandbox Code Playgroud)
你可以称之为:
File[] matchingFiles = findFilesForId(new File("some/path/to/dir"), "XXX");
Run Code Online (Sandbox Code Playgroud)
或者只是检查是否存在,
boolean exists = findFilesForId(new File("some/path/to/dir"), "XXX").length > 0
Run Code Online (Sandbox Code Playgroud)
我创建了以a_id_123.zip,a_id_124.zip,a_id_125.zip,a_id_126.zip命名的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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)该解决方案概括了 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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22591 次 |
| 最近记录: |