Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的JSON执行shell命令_Java_Process_Processbuilder - Fatal编程技术网

如何使用java中的JSON执行shell命令

如何使用java中的JSON执行shell命令,java,process,processbuilder,Java,Process,Processbuilder,我无法在Java process或ProcessBuilder中使用JSON执行命令, 这里我包含了一个我执行的模型命令 ArrayList<String> outPut = new ArrayList<String>(); String sp = "test -n test -p '{\"test\": {\"test\": {\"test\": {\"test\": {\"test\": \"test\"}}}}}'"; Process process = Runti

我无法在Java process或
ProcessBuilder
中使用JSON执行命令, 这里我包含了一个我执行的模型命令

ArrayList<String> outPut = new ArrayList<String>();
String sp = "test -n test -p '{\"test\": {\"test\": {\"test\": {\"test\": {\"test\": \"test\"}}}}}'";
Process process = Runtime.getRuntime().exec(sp);
System.out.println(sp);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

String s = null;

while ((s = stdInput.readLine()) != null) {
    outPut.add(s);
}

System.out.println(outPut);
ArrayList输出=新建ArrayList();
String sp=“test-n test-p'{\'test\':{\'test\':{\'test\':{\'test\':{\'test\':{\'test\'”;
进程进程=Runtime.getRuntime().exec(sp);
系统输出打印项次(sp);
BufferedReader stdInput=新的BufferedReader(新的InputStreamReader(process.getInputStream());
字符串s=null;
而((s=stdInput.readLine())!=null){
输出。添加(s);
}
系统输出打印项次(输出);

问题在于
Runtime.exec(String)
使用
StringTokenizer
拆分参数,然后调用
Runtime.exec(String[])
。 <代码> StrugtoKeisher 不能正确地分割该参数-它不考虑单引号<代码> 。它最终调用test时使用如下内容(每行一个参数):

已注释的解决方案:使用
Runtime.exec(字符串[])
,例如:

String[]cmd={
“测试”,
“-n”,
“测试”,
“-p”,
“{\'test\':{\'test\':{\'test\':{\'test\':{\'test\':\'test\'}”
};
processprocess=Runtime.getRuntime().exec(cmd);

我的测试程序:

import java.io.*;
公开课考试{
公共静态void main(字符串[]args)引发IOException{
try(Writer wr=newfilewriter(“args.txt”)){
for(字符串arg:args)
wr.write(arg+“\n”);
}
}
}
非常简单,没有使用任何IDE,很抱歉


我必须首先调用java,所以我的
cmd
被更改为
cmd={“java”,“test”,“n”…

,在cmd中,这个命令可以工作,但不能通过java代码,可能是因为
运行时
没有使用
'
来不分隔参数,也就是说,它只按空格字符分隔参数(
StringTokenizer
)。请尝试在何处正确分离要运行的可执行文件。如果是,当通过cmd手动执行时,两个连续调用会做什么?@deHaar iam不运行此camand,但它类似于此格式,String sp=“test-n dev test1-p'{“test3\”:{\“test4\”:{“test5\”:{“test6\”:{“test7\”:“test8\“}}}}”,它将正常工作,直接引导cmdOK,然后将所有命令放入一个
列表
,首先是可执行路径,然后启动一个
ProcessBuilder
,我使用此格式进行测试。但它不起作用:-(适用于我,但我正在使用我的
测试
,不确定你的测试是什么。
-n
test
-p
'{test:
{test:
{test:
{test:
{test:
test}}}}}'