2017-01-01 105 views
2

我正在開發一個Java應用程序,它將執行一個控制檯命令。該命令實際執行的是,它將對文件進行更改,然後將不同名稱的副本保存到不同的文件夾(文件和輸出文件夾均由用戶指定)。它需要一些二進制程序來做到這一點,這是我的應用程序的本地資源。如何在Java應用程序中執行控制檯commad?

所以我的代碼是一樣的東西:

... 
public void actionPerformed(ActionEvent e) { 
    File selectedFile = jFileChooser1.getSelectedFile(); 
    File pathAssigned = jFileChooser2.getSelectedFile(); 

    String file = selectedFile.getAbsolutePath(); 
    String output = pathAssigned.getAbsolutePath(); 
    String name = selectedFile.getName(); 

    // What's next??? 
} 

和使用/命令的語法是這樣的:

"command -options /package/binary.bin "+file+" "+output+"\\"+name+"-changed" 

所以我的問題是現在;我的下一個代碼是什麼?我應該使用Runtime嗎?如果是這樣,那麼怎麼樣?

關於將一個本地資源路徑包含到命令中,我的語法是否正確?

我在這裏還是一個新手,以及在Java編程,所以請對你的答案/評論友善。謝謝!

PS。該命令是一個獨立的平臺。

回答

2

我希望下面的代碼可以幫助你。首先你有一個需要參數的shell腳本。

#!/bin/bash 
echo "hola" 
echo "First arg: $1" 
echo "Second arg: $2" 

將它保存在例如/home/dac/proj/javatest2016/src/main/java/myshellScript.sh然後你可以從你的Java代碼傳遞參數。

import java.io.*; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     try { 
      ProcessBuilder pb = new ProcessBuilder("/home/dac/proj/javatest2016/src/main/java/myshellScript.sh", "myArg1", "myArg2"); 
      pb.directory(new File("/home/dac/proj/javatest2016/src/main/java")); 
      Process p = pb.start(); 
      StringBuffer output = new StringBuffer(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line = ""; 
      while ((line = reader.readLine())!= null) { 
       output.append(line + "\n"); 
      } 
      System.out.println("### " + output); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
     } 
    } 
} 

測試

### hola 
First arg: myArg1 
Second arg: myArg2 

enter image description here

+1

非常感謝您,先生!我嘗試了代碼,首先我做了一個簡單的Test.java,打印出「Hello World」和一個批處理文件(我在Windows上工作)編譯它'javac%1',然後我成功了,所以謝謝!我會在我的應用程序上試用它。 +1這是非常有用的:) –

相關問題