【发布时间】:2014-05-14 16:21:11
【问题描述】:
我是 Java 新手,并试图将我的一个项目从 C 转换为 Java,以便将它与另一个 Java 程序结合起来。当我使用 Runtime.exec() 时,我很难得到正确的结果。我有以下程序段,Java 忽略处理给定的命令。
command1 = "mv output/tsk/dir1/metabolic\\ waste.txt output/converted/file16.txt";
r2 = Runtime.getRuntime();
p2 = r2.exec(command1);
p2.waitFor();
这里的问题是文件名“metabolic waste.txt”。当没有空间时,相同的命令起作用。我知道我必须使用 escape char 作为空间,我这样做了。顺便说一句,我正在开发 Ubuntu。
我也尝试过使用
String[] command1 = new String[] {"mv output/tsk/dir1/metabolic\ waste.txt", "output/converted/file16.txt";
但是没有用。
附言给定的代码只是一个例子。我不仅使用 linux mv 命令。我还运行一些命令行工具,例如 pdf2txt。如果文件名中有空格,我仍然会遇到同样的运行命令问题。
已解决:我已经解决了我的问题。我不得不删除转义字符并使用字符串数组,这很荒谬。因此,没有 ESCAPE CHARACTER 空间。以下代码仅适用于此示例和更一般的情况。
source_filepath = "output/tsk/dir1/metabolic waste.txt";
dest_filepath = "output/converted/file16.txt";
String[] str2= {"mv", source_filepath, dest_filepath};
r2 = Runtime.getRuntime().exec(str2);
p2.waitFor();
【问题讨论】:
-
Java 有它自己的 portable 方法:docs.oracle.com/javase/tutorial/essential/io/move.html
-
是刚刚没有工作但仍然执行命令,还是没有编译?
-
不要使用
Runtime.exec(),使用ProcessBuilder! -
@clcto 我不仅需要 mv 命令。但是很高兴知道 Java 的内部方式。谢谢。
-
@DirkyJerky 没有编译错误,但我认为它不会执行我的命令。
标签: java runtime.exec