我是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();
这里的问题是文件名"代谢废物.txt"。当没有空间时,相同的命令工作。我知道我必须使用escape char作为空间而且我这样做。我正在使用Ubuntu btw。
我也尝试过使用
String[] command1 = new String[] {"mv output/tsk/dir1/metabolic\ waste.txt", "output/converted/file16.txt";
但它没有用。
P.S。给定的代码只是一个例子。我不只是使用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();
答案 0 :(得分:0)
您可以将文件名用双引号括起来,如下所示:
String srcFile = "output/tsk/dir1/metabolic\\ waste.txt"
command1 = "mv " + srcFile +" output/converted/file16.txt";
答案 1 :(得分:0)
您必须逃避转义,或将路径括在引号中:
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还使用\
作为转义字符,因此"\\"
实际上只包含一个\