processbuilder不允许重定向输入流/输出流。如何在java中创建管道进程? 我尝试使用此命令,但它无法正常工作。
process = Runtime.getRuntime().exec("cmd","sort < randomwords.txt | sort /R >reversesortes.txt");
编辑:仍然没有用。
ArrayList<String> cmd = new ArrayList<>();
String s = "/R";
cmd.add("cmd");
cmd.add("sort");
cmd.add("<");
cmd.add("randomwords.txt");
cmd.add("|");
cmd.add("sort");
cmd.add("/R");
cmd.add( ">");
cmd.add("reversesortes.txt");
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectError(new File("error.txt"));
Process process = builder.start();
System.out.println("im here" );
int i = process.waitFor();
System.out.println("i"+ i );
答案 0 :(得分:1)
由于shell的名称是cmd
,我假设您的操作系统是Windows。 cmd.exe
需要/c
来引入作为参数传递的命令。在交互式shell中,此命令:
C:\Users\sj>cmd echo foo
Microsoft Windows [version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.
C:\Users\sj>
只打开一个新的交互式shell,等待其标准输入上的命令,而
C:\Users\sj>cmd /c echo foo
foo
C:\Users\sj>
正确执行作为参数传递的命令。
所以你应该写:
ArrayList<String> cmd = new ArrayList<>();
cmd.add("cmd");
cmd.add("/C");
cmd.add("sort < randomwords.txt | sort /R >reversesortes.txt");
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectError(new File("error.txt"));
Process process = builder.start();