Java:部分路径与文件的部分名称一起存在

时间:2012-08-01 09:42:31

标签: java file

我想知道是否有办法知道文件是否存在,如果我只知道目录结构的路径和文件的部分名称。

例如,我想检查以下路径中是否存在以下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 个答案:

答案 0 :(得分:3)

您可以撰写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");
    }
});

答案 1 :(得分:2)

你必须手动完成,列出文件夹中的所有文件,并将每个文件开头与匹配条件进行比较,

Fo commons io你可以做以下

FileUtils.listFiles(new File("/home/"), new PrefixFileFilter("data"), null)

答案 2 :(得分:1)

如果您使用的是Java SE 7,则可以使用新的监视服务:http://docs.oracle.com/javase/tutorial/essential/io/notification.html

答案 3 :(得分:1)

是。您需要查看FileFilter

基本的想法是使用File.listFiles方法,传递过滤器& amp;检查结果数组的长度是否为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的CommonIO API