2013-02-16 55 views
0

我正嘗試使用java代碼執行查找命令。我做了以下操作:使用java代碼執行* nix查找命令

sysCommand = "find . -name '*out*' > file1" 

Runtime runtimeObj = Runtime.getRuntime(); 

try { 
    Process processObj = runtimeObj.exec(sysCommand); 
    processObj.waitFor(); 
    ... 

這個Linux命令在我使用命令行時執行但在Java中失敗,爲什麼?

+2

你的問題是什麼? – Vulcan 2013-02-16 01:52:03

+0

我無法使用java代碼執行此命令 – Maxwell 2013-02-16 01:53:37

回答

1

這個問題可能是duplicateduplicate

  • 不管怎麼說,你可以使用File.list,你想要的文件的 類型提供過濾。你可以遞歸地調用它來獲得所有的子目錄。我不喜歡這個答案。你會認爲有一個更簡單的方法。

  • 我的一位朋友推薦從Apache運行一個命令Commons-Exec。它允許你在命令中使用超時。他推薦它,因爲運行時可能會遇到大標準輸出和標準錯誤。

+0

File.list是否適用於子目錄。就像如果我有多個子目錄中的文件,那麼它會工作。 – Maxwell 2013-02-16 02:00:26

+0

不,我不認爲它會找到子目錄。有一個比[this]更好的方法(http://stackoverflow.com/questions/3008043/list-all-files-from-directories-and-subdirectories-in-java)。 – Jess 2013-02-16 02:06:02

+0

我已經包含了一個使用File.listFiles搜索子目錄的答案。我建議使用'ProcessBuilder',但是是的,做一個子進程有風險,因爲如果標準輸出/錯誤緩衝區填滿,某些操作系統會掛起進程。您必須使用這些流。 – 2013-02-16 02:16:20

1

據我所知,在Runtime.exec中不允許使用任何形式的管路運算符。如果您想將結果移至文件中,則必須通過Process.getInputStream以Java方式執行此操作。

1

如果你有興趣在Java中這樣做,那麼你會想要做這樣的事情:

public void find(File startDirectory, FileFilter filter, List<File> matches) { 
    File[] files = startDirectory.listFiles(filter); 
    for (File file:files) { 
     if(file.isDirectory()) { 
      find(file, filter, matches); 
     } else { 
      matches.add(file); 
     } 
    } 
} 

然後你需要,但寫FileFilter接受符合您模式的目錄和文件。