如何在Java应用程序中执行控制台命令?

时间:2017-01-01 22:17:11

标签: java console

我正在开发一个执行控制台命令的Java应用程序。该命令实际上是做什么的,它将对文件进行更改,然后将其具有不同名称的副本保存到不同的文件夹(文件和输出文件夹都由用户指定)。它需要一些二进制程序来执行此操作,这是我的应用程序的本地资源。

所以我的代码就像:

...
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。顺便说一下,该命令是一个独立的平台。

1 个答案:

答案 0 :(得分: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