2012-07-13 36 views
0

我试图从Java运行多个命令shell。我能够做到这一点(并使用PrintWriter在控制台中获取输出)。但是,我希望能够在单独的字符串中获取每个命令的输出。那可能吗?在Java中使用PrintWriter

下面是代码的一部分:

File wd = new File("/bin"); 
    Process proc = null; 
    BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true); 
    out.println("cd .."); 

    out.println("ls"); 
    System.out.println("moving to /var directory"); 
    out.println("cd /var/"); 
    out.println("ls"); 
    //get output of ls command in string variable 
    out.println("cd .."); 
    out.println("cd /etc/"); 
    out.println("ls -a"); 
    out.println("ps"); 

    out.println("exit"); 
    try { 
     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     proc.waitFor(); 
     in.close(); 
     out.close(); 
     proc.destroy(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

也许你可以在Java(File.listFiles())中执行'ls',然后向'ps'调用操作系统(或者让一些Java库也可以这么做)? – Thilo 2012-07-13 08:29:01

+0

感谢您的回应,但将每个命令的输出放在一个文件中将不是有用的(在文件中写入然后解析它)...我仍在寻找将PrintWriter转换为字符串的方法......它将解决它。 .. – Mas 2012-07-13 08:43:42

回答

0

你试过把一个部分像

StringBuilder builder = new StringBuilder(); 
String line = null; 
while ((line = in.readLine()) != null) { 
    builder.append(line).append("\n"); 
} 
String commandOutput = builder.toString(); 

每个命令后?这大致是你想要实现的吗?

+0

感谢您的回应,它真的interresting,但我想要做的是获取每个comamnd输出是字符串,commandOutput字符串获取所有命令结果在一个字符串... :-) – Mas 2012-07-16 15:15:43

+0

** @Jeff Johnston :可能是一个printerWriter声明的数组输出?在这种情况下,我们可以将每个分隔字符串中的命令与构建器实例分开** – Mas 2012-07-17 09:52:13