1

ディレクトリ構造のパスとファイルの名前の一部しかわからない場合に、ファイルが存在するかどうかを知る方法があるかどうかを知りたいです。

たとえば、次のtar.gzファイルが次のパスに存在するかどうかを確認したいと思います。

/home/rah/data/download/lib/test@4.3-00@20120731.0.tar.gz

知っているときに自分のプログラムだけを続けてほしい

path = /home/rah/data/download/lib/
partial file name = test@4.3-00@20120731 

(「0.tar.gz」が欠落していることに注意してください)。実際、ファイル名の日付の後に0を計算したくありません(0、1、2、3 ...の任意の値にすることができます)。

だから私はこれを機能させたい:

if( filename.canRead() ) {
//
}

ファイル名が次のような場合: "test @ 4.3-00 @ 20120731。.tar.gz "ここで、STAR()は任意の番号にすることができます

どうすればいいですか?または、部分的なパスが存在することを確認することは可能ですか?

/home/rah/data/download/lib/test@4.3-00@20120731?

ありがとうございました。

4

4 に答える 4

4

FileFilterを作成して、それをFile.listFiles()メソッドに渡すことができます。おおよそ、次のようになります。

File dir = new File("/home/rah/data/download/lib/");

// list the files using a anonymous FileFilter
File[] files = dir.listFiles(new FileFilter() {

    @Override
    public boolean accept(File file) {
        return file.getName().startsWith("test@4.3-00@20120731");
    }
});
于 2012-08-01T09:50:30.677 に答える
2

手動で行う必要があり、フォルダー内のすべてのファイルをリストダウンし、各ファイルの開始を一致基準と比較します。

Fo commons ioでは、次のことができます

FileUtils.listFiles(new File("/home/"), new PrefixFileFilter("data"), null)
于 2012-08-01T09:46:31.983 に答える
1

はい。FileFilterを確認する必要があります。

基本的な考え方は、File.listFilesメソッドを使用して、フィルターを渡し、結果の配列の長さが0であるかどうかを確認することです。

例@OPsリクエストで更新

他の人がすでに指摘しているように、それは比較的簡単です。

File path = new File("/home/rah/data/download/lib");
File[] listFiles = path.listFiles(new FileFilter() {

    @Override
    public boolean accept(File file) {

        String name = file.getName().toLowerCase();
        return name.startsWith("test@4.3-00@20120731");

    }

});

if (listFiles.length == 0) {

    // File does not exit

} else {

    // File exists

}

FileFilterあなたは本当にあなたが一致する必要があるあなたを渡すことができるあなた自身を構築するべきStringです、しかし私はそれを任せます

また指摘したように、ApacheのCommonIOAPIをチェックすることができます

于 2012-08-01T09:52:11.147 に答える
1

Java SE 7 を使用している場合は、新しい監視サービスを使用できます: http://docs.oracle.com/javase/tutorial/essential/io/notification.html

于 2012-08-01T09:49:07.637 に答える