私はディレクトリを持っており、その中にはファイル名が"a_id_XXX.zip"
となっています。Javaでワイルドカードを使ってファイルをチェックする方法は?
id
とFile dir
のファイルが存在するかどうかを確認するにはどうすればよいですか?
私はディレクトリを持っており、その中にはファイル名が"a_id_XXX.zip"
となっています。Javaでワイルドカードを使ってファイルをチェックする方法は?
id
とFile dir
のファイルが存在するかどうかを確認するにはどうすればよいですか?
FileFilter
(ここでコード化されたanonymously)を渡すDIR File
のlistFiles()
方法NTO、次のように:
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");
方法としてバンドルさ
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");
}
});
、それは次のようになります。
または単に存在を確認するには、
boolean exists = findFilesForId(new File("some/path/to/dir"), "XXX").length > 0
その他の回答またはantライブラリを試してみてください。ここでは例を示します。http://code.google.com/p/maven-replacer-plugin/source/browse/trunk/src/main/java/com/google/code/maven_replacer_plugin/include/FileSelector.java
私は a_id_126.zip a_id_123.zip、a_id_124.zip、a_id_125.zipで名前の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);
}
}
}
}
a_id_126.zipた
a_id_125.zipた
あなたがapacheのWildCardFileFilter
のJava 7は、パターンマッチング(PathMatcher)と再帰的なディレクトリ歩行のためのいくつかの良いサポートを持って使用することができます(Files.walkFileTree())。
ファイルの検索:http://docs.oracle.com/javase/tutorial/essential/io/find.html
このソリューションは、ボヘミアンの答えに一般化し、元の質問の文脈では、OracleのJavaドキュメントで、このページでは良いスタートです。正規表現を使用し、内部クラスをJava 8ラムダ式に置き換えます。元の実装に感謝@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));
}
}
リンクが切れています – Fabi755