在java中执行外部命令

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

更多细节:我使用的是im4java,它是一个java库,在内部使用ProcessBuilder来执行imagemagick的程序。 这很慢。 我创建了一个小unit testing,显示ProcessBuilder(不是im4java)是问题所在。 缓慢是使用ProcessBuilder的启动开销。 我在互联网上发现了一些post,说流程编译器有开销,所以不仅仅是我这样说。

List commands = new ArrayList(); 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(); 

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

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

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

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