changing the working-directory of command from java
我需要从Java项目中的一个包中执行一个函数来执行.exe文件。现在工作目录是Java项目的根目录,但是是我项目中子目录中的.exe文件。以下是项目的组织方式:
1 2 3 4 5 6 7 | ROOT_DIR |.......->com | |......->somepackage | |.........->callerClass.java | |.......->resource |........->external.exe |
最初我尝试直接通过以下方式运行.exe文件:
1 2 3 |
但问题是外部的.exe需要访问它自己目录中的一些文件,并一直认为根目录就是它的目录。我甚至尝试使用.bat文件来解决这个问题,但同样的问题出现了:
而.bat文件与.exe文件在同一目录中,但会发生相同的问题。以下是.bat文件的内容:
1 2 3 4 5 6 | @echo off echo starting process... external.exe -i input -o output pause |
即使我将.bat文件移到根目录并修复其内容,问题也不会消失。PLZ PLZ PLZ帮助
要实现这一点,您可以使用processbuilder类,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | File pathToExecutable = new File("resources/external.exe" ); ProcessBuilder builder = new ProcessBuilder( pathToExecutable.getAbsolutePath(),"-i","input","-o","output"); builder.directory( new File("resources" ).getAbsoluteFile() ); // this is where you set the root folder for the executable to run with builder.redirectErrorStream(true); Process process = builder.start(); Scanner s = new Scanner(process.getInputStream()); StringBuilder text = new StringBuilder(); while (s.hasNextLine()) { text.append(s.nextLine()); text.append(" "); } s.close(); int result = process.waitFor(); System.out.printf("Process exited with result %d and output %s%n", result, text ); |
这是相当多的代码,但它可以让您更好地控制进程的运行方式。
使用此形式的
1 2 3 4 |
工作目录是第三个参数。如果您不需要设置任何特殊环境,您可以通过
还有一种方便的方法:
1 2 3 4 |
…在一个字符串中指定命令(它只是为您转换成一个数组;有关详细信息,请参阅文档)。
我在我的项目中遇到了同样的问题,我尝试了这个关于
1。移动到所需目录(cd命令)。< BR>2。在需要时执行命令。< BR>我用临时的.bat文件作为命令调用