Java 如何读取process builder输入和错误流?

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() : ""; }

我尝试使用中的解决方案读取进程的std和错误,但它没有输出任何内容

在启动流程之前,是否应该有一种方法将流读取器附加到流程生成器

/*
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(文件名)并且没有其他参数,它会给出一些输出