我是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”。没有空间时,相同的命令起作用。我知道我必须将转义字符用于空间,并且做到了。我正在研究Ubuntu btw。
我也尝试使用
String[] command1 = new String[] {"mv output/tsk/dir1/metabolic\ waste.txt", "output/converted/file16.txt";
但这没用。
ps给定的代码只是一个例子。我不仅使用linux mv命令。我还运行了一些命令行工具,例如pdf2txt。如果文件名中有空格,我仍然会遇到运行命令的相同问题。
已解决:我已经解决了我的问题。我不得不删除转义符并使用字符串数组,这很荒谬。因此,没有逃脱字符的空间。以下代码仅适用于本示例,并且适用于更一般的示例。
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();
您必须进行转义,或者将路径用引号引起来:
String[] command1 = new String[] {"mv output/tsk/dir1/metabolic\\ waste.txt", "output/converted/file16.txt"}; String[] command1 = new String[] {"mv \"output/tsk/dir1/metabolic waste.txt\"", "output/converted/file16.txt"};
您必须使用,\\因为java也\用作转义字符,因此"\\"实际上只包含一个\
\\
\
"\\"