我想在Java
中運行一些unix/shell
命令並處理輸出。我使用了getRuntime.exec()
,但它沒有給出像ls directory_path/*.tar.gz
這樣的命令的正確輸出。對於那個命令我的程序沒有給出任何輸出,但它給出了錯誤,說No such file or directory
。但是相同的命令在命令提示符下提供正確的輸出。如何使用Java通配符運行unix/shell命令?
是否有任何其他方式來執行在Java中包含通配符的命令?
我想在Java
中運行一些unix/shell
命令並處理輸出。我使用了getRuntime.exec()
,但它沒有給出像ls directory_path/*.tar.gz
這樣的命令的正確輸出。對於那個命令我的程序沒有給出任何輸出,但它給出了錯誤,說No such file or directory
。但是相同的命令在命令提示符下提供正確的輸出。如何使用Java通配符運行unix/shell命令?
是否有任何其他方式來執行在Java中包含通配符的命令?
是否有任何其他方式來執行命令,其中包括Java通配符?
是的。
你在你的代碼的三個潛在的問題:
假設你想看到你需要把它產生的輸出護理外部命令的輸出,並且自己打印出來。
按照我在這裏提供的示例:
如果你天真地經歷Runtime.exec
。你要的*
shell擴展不工作明確地通過/bin/bash
。
如果您嘗試列出的directory_path/*.tar.gz
的內容,你應該知道,(如果你不開始與/
)directory_path
相對當前工作目錄將得到解決。首先嚐試給出絕對路徑以確保其正常工作,然後嘗試找出爲什麼找不到相對路徑。
這裏是一個應該工作的完整例子:
Process proc = new ProcessBuilder("/bin/bash", "-c",
"ls /.../directory_path/*.tar.gz").start();
Reader reader = new InputStreamReader(proc.getInputStream());
int ch;
while ((ch = reader.read()) != -1)
System.out.print((char) ch);
reader.close();
這是因爲您指定了一個相對路徑並且您的應用程序正在工作目錄中運行。您指定的路徑相對於該工作目錄。
要了解絕對路徑,可以查看工作目錄。
System.out.println("Working directory: " + System.getProperty("user.dir"));
「ls directory_path/* .tar.gz」相對於CURRENT目錄有效。
no here directory_path =/actual/DEPOT – akhila 2012-08-03 06:18:37
仔細檢查你的路徑,也是當前目錄,你都在。 '沒有這樣的文件或目錄'意味着它正在正確執行命令,但該路徑不是你認爲它是什麼的。 – 2012-08-03 06:25:05
你只是想列出文件?你可以用java代碼來做到這一點,而不是運行依賴於系統的「本地」工具。 – hennr 2012-08-03 07:13:54