我正在开发一个执行控制台命令的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。顺便说一下,该命令是一个独立的平台。
答案 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