2012-07-13 74 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