我想知道是否有办法知道文件是否存在,如果我只知道目录结构的路径和文件的部分名称。
例如,我想检查以下路径中是否存在以下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?
谢谢。
答案 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