我正在尝试运行一个OSPL命令,该命令是plutil,用于将某些plist转换为json格式。我在终端中使用的命令是
plutil -convert json -o - '/Users/chris/project/temp tutoral/project.plist'
路径名称带有白色间距的此命令在我的终端中可以很好地运行,并且我的终端用单引号(“)覆盖路径名,但是问题在于在Java
Runtime.getRuntime().exec(cmdStr)
下面运行此命令是我编写的代码
public static void main(String args[]){
LinkedList<String> output = new LinkedList<String>();
String cmdStr = "plutil -convert json -o - /Users/chris/project/temp tutoral/project.plist";
//String cmdStr = " plutil -convert json -o - '/Users/chris/project/temp tutoral/project.plist'";
//String [] cmdStr ={ "plutil -convert json -o - ", "\"Users/chris/project/temp tutoral/project.plist\""};
Process p;
try {
p = Runtime.getRuntime().exec(cmdStr);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.add(line);
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
如果我运行此代码,它将给我一个错误
'Users/chris/project/temp: file does not exist or is not readable or is not a regular file (Error Domain=NSCocoaErrorDomain Code=260 "The file “temp” couldn’t be opened because there is no such file." UserInfo=0x7fd6b1c01510 {NSFilePath='Users/chris/project/temp, NSUnderlyingError=0x7fd6b1c01280 "The operation couldn’t be completed. No such file or directory"})
tutoral/project.plist': file does not exist or is not readable or is not a regular file (Error Domain=NSCocoaErrorDomain Code=260 "The file “project.plist” couldn’t be opened because there is no such file." UserInfo=0x7fd6b1d6dd00 {NSFilePath=tutoral/project.plist', NSUnderlyingError=0x7fd6b1d6c6b0 "The operation couldn’t be completed. No such file or directory"})
我也尝试过
但没有一个成功。
如果我在安排命令时发生任何错误或任何语法错误,请提出建议。提前致谢。
调用Runtime.getRuntime().exec(cmdStr)
是一种便捷的方法-
使用数组调用命令的快捷方式。它在空白处分割命令字符串,然后对结果数组运行命令。
因此,如果您给它提供一个字符串,其中任何参数都包含空格,则它不会像shell一样解析引号,而只是将其分解为以下部分:
// Bad array created by automatic tokenization of command string
String[] cmdArr = { "plutil",
"-convert",
"json",
"-o",
"-",
"'/Users/chris/project/temp",
"tutoral/project.plist'" };
当然,这不是您想要的。因此,在这种情况下,应将命令分成自己的数组。每个参数在数组中都应该有其自己的元素,并且不需要为包含空格的参数加上引号:
// Correct array
String[] cmdArr = { "plutil",
"-convert",
"json",
"-o",
"-",
"/Users/chris/project/temp tutoral/project.plist" };
请注意,启动过程的首选方式是使用ProcessBuilder
,例如:
p = new ProcessBuilder("plutil",
"-convert",
"json",
"-o",
"-",
"/Users/chris/project/temp tutoral/project.plist")
.start();
ProcessBuilder
提供更多的可能性,并且Runtime.exec
不鼓励使用。
问题内容: 如何执行路径名中包含空格的Java System(shell)命令? 我尝试将引号和反斜杠()放在一起,但这不起作用。 问题答案: 到目前为止,最可靠的方法是使用Runtime.exec(String [] cmdarray) 。 如果使用Runtime.exec(String command) ,则Java仅在空白处分割命令。 使用调用new StringTokenizer(comm
我正在尝试运行一个OSX命令,它是plutil,用于将某些plist转换为json格式。我在terminal中使用的命令是 这个路径名为白色空格的命令在我的终端中运行良好,撇号(“)覆盖了路径名,但问题是在java的下面是我编写的代码 如果我运行此代码,它会给我一个错误 我也试过了, 在命令字符串中输入撇号 按照我的几个站点的建议更改数组字符串中的命令 但没有一个奏效。 如果我在安排命令时做错了什
我有一个主文件,它使用(从主I do a source)一个属性文件,其中的变量指向路径。 属性文件如下所示: 问题是,我必须使用带空格的路径(我不能改变它)。 我试着用引号避开空白,但到目前为止没有解决方案。 我编辑了路径,单引号的问题是我在路径中使用了另一个变量
我在一个web应用程序上工作,该应用程序从其代码中调用多个web服务客户端。 每个 Web 服务都有一些通用命名空间,但是当我生成每个客户端时,我目前正在将这些命名空间映射到不同的包 e. g. g. Web服务1的名称空间1- Web 服务 2 的命名空间1 - 其中namespace1引用相同的命名空间URL。 使用Wsdl2Java的namespace2package选项: 我可以毫无问题地
我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有一个空格时,它失败了,我不知道如何解决这个问题,因为scp似乎认为我在复制多个文件。我正在使用一个变量来标记我需要的路径,所以添加反斜杠似乎不容易解决。 这是我正在使用的代码: 我试过单引号、双引号和单引号加双引号,都不行。有人能帮我解决吗?顺便说一下,代码中的mkdir语句是有效的。
问题内容: 我正在尝试使用FileInputStream打开名称中包含空格的文件。 例如: 结果是抛出了FileNotFoundException。我试图对filePath进行硬编码,以仅查看是否应该转义空格字符,但它似乎没有用。关于这个问题有什么建议吗? 编辑:只是与每个人都在同一个页面上查看此问题…打开名称中没有空格的文件有效,具有空格的文件将失败。权限既不是这里的问题,也不不是文件夹分隔符。