当filename有空格时,运行时exec()不运行命令

我是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 btw。

我也试过用

String[] command1 = new String[] {"mv output/tsk/dir1/metabolic\ waste.txt", "output/converted/file16.txt";

但它不起作用。

ps给定的代码只是一个例子。 我不仅使用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(); 

您必须逃避转义,或将路径括在引号中:

 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也使用\作为转义字符,所以"\\"真的只包含一个\

您可以将文件名用双引号括起来,如下所示:

  String srcFile = "output/tsk/dir1/metabolic\\ waste.txt" command1 = "mv " + srcFile +" output/converted/file16.txt";