2017-01-01 91 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这是非常有用的:) –

相关问题