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

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

于 2012-08-01T09:49:07.637 回答
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 的 CommonIO API

于 2012-08-01T09:52:11.147 回答