2010-06-13 87 views
3

我有問題的Runtime.exec()在Java中 我的代碼:Java - Runtime.getRuntime()。exec()發生了什麼事?

String lol = "/home/pc/example.txt"; 
String[] b = {"touch", lol}; 
try { 
    Runtime.getRuntime().exec(b); 
} catch(Exception ex) { 
    doSomething(ex); 
} 

它的工作很好,但是當我試圖長樂變量「笑」的文件在硬盤

例如不會創建: String lol = x.getPath();其中getPath()返回字符串

我該怎麼辦?

感謝您的答覆:)

+0

在Linux上沒有做過很多的Java,但可能是一個權限問題 - 也許沙箱不允許您在主目錄之外創建文件?只是一個猜測,也許是要看的東西。 – 2010-06-13 13:41:37

+0

Thx for reply,但我設置了chmod 777,當我不使用getPath()文件時出現。 – kunkanwan 2010-06-13 13:53:52

+0

注意:如果命令失敗,'Runtime#exec()'不會引發任何異常。你想閱讀它的輸出或錯誤流。也看到這個鏈接(所有4頁)http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html – BalusC 2010-06-13 14:18:33

回答

0

單純看笑的內容,當你叫x.getPath()。我猜想這不是一個絕對路徑和文件被創建,但不是你期望的那樣。

xJava.io.File us getCanonicalPath()爲絕對路徑。

+0

好點,但如果我打印x.getPath()獲取結果等於「/home/pc/example.txt」。這應該是好的。當我使用Runtime.getRuntime()。exec(「touch /home/pc/example.txt」)它工作的很好,但是當我嘗試使用函數時它沒有工作。 – kunkanwan 2010-06-13 13:52:38

1

您可能正在使用java.io.File
在這種情況下,getPath()不會返回絕對路徑。 例如:

System.out.println(System.getProperty("user.dir")); // Prints "/home/pc/" 
// This means that all files with an relative path will be located in "/home/pc/" 
File file = new File("example.txt"); 
// Now the file, we are pointing to is: "/home/pc/example.txt" 
System.out.println(file.getPath()); // Prints "example.txt" 
System.out.println(file.getAbsolutePath()); // Prints "/home/pc/example.txt" 

所以,結論是:使用java.io.File.getAbsolutePath()

提示:還存在java.io.File.getAbsoluteFile()方法。調用getPath()時,這將返回絕對路徑。


我剛纔讀給對方的回答您的評論:

我認爲你做:

String[] cmd = {"touch /home/pc/example.txt"}; 
Runtime.getRuntime().exec(cmd); 

這將無法正常工作,因爲調用的應用程序的操作系統的搜索「touch /home/pc/example.txt」 。
現在,你在想「WTF?爲什麼?」
因爲方法Runtime.getRuntime().exec(String cmd);將字符串分割到空格上。 而Runtime.getRuntime().exec(String[] cmdarray);不分割它。所以,你必須自己做:

String[] cmd = {"touch", "/home/pc/example.txt"}; 
Runtime.getRuntime().exec(cmd); 
+0

瘋狂........ – Thufir 2016-04-06 09:32:51

0

如果在琴絃組字面「/home/pc/example.txt」,並x.getPath也返回相同的值代碼工作,那麼它必須工作 - 就像那樣簡單。這意味着x.getPath()實際上正在返回其他內容。也許有字符串中有空格?嘗試直接比較字符串:

if (!"/home/pc/example.txt".equals(x.getPath())) throw new RuntimeException(); 
0

像真實路徑

String path = request.getSession().getServletContext().getRealPath("/"); 

這裏u能得到真正的路徑寫代碼..........

5

下面是解到你的問題。我遇到了類似的問題,並且這對我來說很重要,它應該執行輸出目錄中的文件輸出。

ProcessBuilder proc = new ProcessBuilder("<YOUR_DIRECTORY_PATH>" + "abc.exe"); // <your executable path> 
    proc.redirectOutput(ProcessBuilder.Redirect.INHERIT); // 
    proc.directory(fi); // fi = your output directory 
    proc.start(); 
相關問題