![](/img/trans.png)
[英]find same file with in many directories in hierarchical directories in java
[英]Java to traverse all directories and find a file
我必須搜索可以在任何目錄或驅動器中的文件。 它應該與任何操作系統兼容。 當我用google搜索時,大多數代碼都會遍歷特定目錄,而不是整個文件系統。 有什么辦法可以有效地做到這一點? 任何幫助或建議,將不勝感激。
下面的代碼是我從http://www.mkyong.com/java/how-to-traverse-a-directory-structure-in-java/中獲得的 ,但是我們必須傳遞一些目錄作為參數。 有沒有一種方法可以概括所有位置?
public static void main (String args[]) {
displayIt(new File("C:\\"));
}
public static void displayIt(File node){
System.out.println(node.getAbsoluteFile());
if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
displayIt(new File(node, filename));
}
}
Apache Commons-IO是用於此類操作的良好API。 對於Unix系統,您可以僅使用根“ /”,但這不適用於Windows,因此您將需要所有根並對其進行迭代:
File[] roots = File.listRoots();
Collection<File> files = new ArrayList<File>();
for(File root : roots) {
files.addAll(FileUtils.listFiles(
root,
new RegexFileFilter(<your regex filter>),
DirectoryFileFilter.DIRECTORY
));
}
這種代碼段將列出目錄和子目錄中的所有文件。 您不必將任何文件添加到allFiles中,您可以在此處進行檢查。 由於您尚未提供任何代碼(所以我假設您尚未嘗試任何操作),我將讓您對其進行更新;)
private void addFiles(File file, Collection<File> allFiles) {
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
allFiles.add(f);
addFiles(f, allFiles);
}
}
}
如果您想通過遞歸進行操作,以下是DFS的代碼,代碼可能無法正常工作(我從未對其進行過測試),並且未進行優化,但可能會為您提供一些解決問題的方法
File find(String directoryName, String pattern)
{
File currentDirectory = loadFile(directoryName);
for (String name: currentDirectory .list())
{
File children = loadFile(name)
if (children.isDirectory())
{
File file = find(name, pattern)
if (file !=null)
{
return file;
}
}
else
{
if (match(name,pattern)
{
return children;
}
}
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.