2010-06-13 85 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(); 
相关问题