2014-09-26 166 views
1

這應該很容易。這個問題(Java - Search for files in a directory)似乎讓我有99%的途徑到達我需要的地方,但是失蹤的1%是一個真正的SOB。在目錄中查找文件並返回其完整路徑和文件名

我需要在一個目錄中找到一個特定的文件,並將完整路徑和文件名作爲字符串返回。如果有多個匹配的文件,那很好,我只需要第一個匹配。

下面的代碼可以遞歸地遍歷目錄結構並返回所有匹配 - 當我將sysout放入方法的各個部分時,我可以看到它發生了 - 但是我不能當我找到一場比賽並讓我返回比賽的價值時,我會停下來。

我試着用WHILE語句替換FOR語句,該WHILE語句由​​foundfile變量的值以及半打其他方法控制,但它們都歸結爲相同的結尾;當我找到匹配的文件並將其設置爲「else if」子句中的foundfile變量時,for循環將繼續迭代,並在下一個循環中用「」值覆蓋foundfile變量的值。我會認爲從「if else」子句中調用setOutput方法會成功設置該值,直到列表數組爲空,但顯然不是。

顯然有一些關於遞歸和參數的持久性,我從根本上誤解。任何人都可以照亮?

package app; 

import java.io.*; 
import java.util.*; 

class FindFile { 

    public String setOutput(String name, File file, String fileloc) { 
     String foundfile = fileloc; 
     File[] list = file.listFiles(); 
     if (list != null) 
      for (File fil : list) { 
       if (fil.isDirectory()) { 
        setOutput(name, fil, foundfile); 

       } else if (fil.getName().contains(name)) { 
        foundfile = (fil.getParentFile() + "\\" + fil.getName()); 
        setOutput(name, fil, foundfile); 
       } 
      } 

     return foundfile; 

    } 

    public static void main(String[] args) { 
     FindFile ff = new FindFile(); 
     String thisstring = ff.setOutput(".jar", new File("/Temp/df384b41-198d-4fee-8704-70952d28cbde"), ""); 

     System.out.println("output: " + thisstring); 

    } 
} 
+0

這個環節將是對你有幫助。 http://docs.oracle.com/javase/tutorial/essential/io/find.html – 2014-09-26 06:33:44

回答

4

找到它時可以返回文件路徑。沒有需要檢查的其他文件,如果你只在第一場比賽感興趣:

下面是一個例子(未測試):

public String setOutput(String name, File file) { 
    File[] list = file.listFiles(); 
    if (list != null) { 
     for (File fil : list) { 
      String path = null; 
      if (fil.isDirectory()) { 
       path = setOutput(name, fil); 
       if (path != null) { 
        return path; 
       } 
      } else if (fil.getName().contains(name)) { 
       path =fil.getAbsolutePath(); 
       if (path != null) { 
        return path; 
       } 
      } 
     } 
    } 
    return null; // nothing found 
} 
+0

正如你所說沒有測試它不工作 – 2014-09-26 05:27:39

+0

現在它的工作。 – jrhooker 2014-09-26 05:33:00

+0

好吧,你是對的,我做了一些更正。 – DirkNM 2014-09-26 05:34:05

相關問題