在java中执行外部命令

时间:2010-10-15 14:58:29

标签: java imagemagick

有没有办法在java中执行一个没有使用ProcessBuilder的启动开销(慢)的命令?

更多细节:我使用的是im4java,它是一个内部使用ProcessBuilder来执行imagemagick程序的java库。这很慢。我创建了一个小单元测试,显示ProcessBuilder(不是im4java)是问题所在。缓慢是使用ProcessBuilder的启动开销。我在互联网上发现了一些帖子,说过程序员有开销,所以不仅仅是我这么说。

List<String> commands = new ArrayList<String>();
commands.add("C:\\PROGRA~2\\ImageMagick-6.6.4-Q16\\convert.exe");
commands.add("dog.jpg");
commands.add("output.jpg");
ProcessBuilder processBuilder = new ProcessBuilder(commands);
Process start = processBuilder.start();
start.waitFor();

2 个答案:

答案 0 :(得分:0)

Runtime.getRuntime().exec(...)  

可用于运行外部命令。您可以将List转换为命令数组或字符串以传递给exec()。

答案 1 :(得分:0)

不建议这样做,但您可以编写一个JNI库来执行与ProcessBuilder相同的操作。也许你会更快,但我不会指望它,加上你会失去跨平台的兼容性。

我们在这说话的速度有多慢?我正在使用ProcessBuilder来运行Git命令(还没有机会查看JGit),而且看起来很活泼。你可能在Linux上有更好的运气,因为开销可能实际上是在Windows重量级进程创建中。