我需要根据目录树中的名称查找文件。然后显示此文件的路径。我找到了这样的东西,但它根据扩展搜索。有人可以帮助我如何根据我的需要重新编写代码...谢谢
public class filesFinder {
public static void main(String[] args) {
File root = new File("c:\\test");
try {
String[] extensions = {"txt"};
boolean recursive = true;
Collection files = FileUtils.listFiles(root, extensions, recursive);
for (Iterator iterator = files.iterator(); iterator.hasNext();) {
File file = (File) iterator.next();
System.out.println(file.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:11)
public class Test {
public static void main(String[] args) {
File root = new File("c:\\test");
String fileName = "a.txt";
try {
boolean recursive = true;
Collection files = FileUtils.listFiles(root, null, recursive);
for (Iterator iterator = files.iterator(); iterator.hasNext();) {
File file = (File) iterator.next();
if (file.getName().equals(fileName))
System.out.println(file.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:2)
Java中的递归目录搜索非常简单。 java.io.File
类具有listFiles()
方法,该方法为目录的所有File
子项提供;您还可以在isDirectory()
上调用File
方法来确定是否应该递归搜索特定的孩子。
答案 2 :(得分:1)
您可以像这样使用FileFilter。
public class MyFileNameFilter implements FilenameFilter {
@Override
public boolean accept(File arg0, String arg1) {
// TODO Auto-generated method stub
boolean result =false;
if(arg1.startsWith("KB24"))
result = true;
return result;
}
}
并像这样称呼它
File f = new File("C:\\WINDOWS");
String [] files = null;
if(f.isDirectory()) {
files = f.list(new MyFileNameFilter());
}
for(String s: files) {
System.out.print(s);
System.out.print("\t");
}
答案 3 :(得分:0)
我真的不知道FileUtils的作用,但如何将扩展名中的“txt”更改为“yourfile.whatever”?
答案 4 :(得分:0)
public static File find(String path, String fName) {
File f = new File(path);
if (fName.equalsIgnoreCase(f.getName())) return f;
if (f.isDirectory()) {
for (String aChild : f.list()) {
File ff = find(path + File.separator + aChild, fName);
if (ff != null) return ff;
}
}
return null;
}