Java 如何读取process builder输入和错误流?
我尝试使用中的解决方案读取进程的std和错误,但它没有输出任何内容 在启动流程之前,是否应该有一种方法将流读取器附加到流程生成器Java 如何读取process builder输入和错误流?,java,process,stdout,stdin,Java,Process,Stdout,Stdin,我尝试使用中的解决方案读取进程的std和错误,但它没有输出任何内容 在启动流程之前,是否应该有一种方法将流读取器附加到流程生成器 /* private String getInputAsString(InputStream is) { try(java.util.Scanner s = new java.util.Scanner(is)) { return s.useDelimiter("\\A").hasNext() ? s.next() : ""; }
/*
private String getInputAsString(InputStream is)
{
try(java.util.Scanner s = new java.util.Scanner(is))
{
return s.useDelimiter("\\A").hasNext() ? s.next() : "";
}
}
*/
private static BufferedReader getOutput(Process p) {
return new BufferedReader(new InputStreamReader(p.getInputStream()));
}
private static BufferedReader getError(Process p) {
return new BufferedReader(new InputStreamReader(p.getErrorStream()));
}
List<String> args = new ArrayList<String>();
args.add ("cmd"); // command name
args.add ("/c");
args.add ("start");
args.add (fileName);
ProcessBuilder pb = new ProcessBuilder (args);
pb.directory(new File(Support.getJustThePathFromFile(file)));
Map<String, String> envs = pb.environment();
String path = envs.get("Path");
envs.put("Path", Paths.get(".").toAbsolutePath().normalize().toString() + ";" +path);
//pb.redirectOutput(new Redirect() {});
Process p = pb.start();
//String stdOut = getInputAsString(p.getInputStream());
//String stdErr = getInputAsString(p.getErrorStream());
//System.err.println("stdOut=" + stdOut);
//System.err.println("stdErr=" + stdErr);
try
{
p.waitFor();
BufferedReader output = getOutput(p);
BufferedReader error = getError(p);
String ligne = "";
while ((ligne = output.readLine()) != null) {
System.out.println(ligne);
}
while ((ligne = error.readLine()) != null) {
System.out.println(ligne);
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
/*
私有字符串getInputAsString(InputStream为)
{
try(java.util.Scanner s=new java.util.Scanner(is))
{
返回s.useDelimiter(“\\A”).hasNext()?s.next():“”;
}
}
*/
私有静态BufferedReader getOutput(进程p){
返回新的BufferedReader(新的InputStreamReader(p.getInputStream());
}
私有静态BufferedReader getError(进程p){
返回新的BufferedReader(新的InputStreamReader(p.getErrorStream());
}
List args=new ArrayList();
args.add(“cmd”);//命令名
参数添加(“/c”);
args.add(“开始”);
args.add(文件名);
ProcessBuilder pb=新的ProcessBuilder(args);
目录(新文件(Support.getJustThePathFromFile(File));
Map envs=pb.environment();
字符串路径=envs.get(“路径”);
envs.put(“Path”,Path.get(“.”)。toAbsolutionPath().normalize().toString()+”;“+Path);
//重定向输出(新的重定向(){});
进程p=pb.start();
//字符串stdOut=getInputAsString(p.getInputStream());
//字符串stdErr=getInputAsString(p.getErrorStream());
//System.err.println(“stdOut=“+stdOut”);
//System.err.println(“stdErr=“+stdErr”);
尝试
{
p、 waitFor();
BufferedReader输出=getOutput(p);
BufferedReader error=getError(p);
字符串ligne=“”;
而((ligne=output.readLine())!=null){
系统输出打印LN(ligne);
}
而((ligne=error.readLine())!=null){
系统输出打印LN(ligne);
}
}
捕捉(中断异常e)
{
e、 printStackTrace();
}
ProcessBuilder
没有流,但是Process
有.Hmm,如果我只有args.add(文件名)代码>并且没有其他参数,它会给出一些输出