小编典典

文件名包含空格时,运行时exec()不运行命令

java

我是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();

阅读 220

收藏
2020-11-26

共1个答案

小编典典

您必须进行转义,或者将路径用引号引起来:

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也\用作转义字符,因此"\\"实际上只包含一个\

2020-11-26