当前位置: 首页 > 面试题库 >

从Java更改命令的工作目录

汪永春
2023-03-14
问题内容

我需要从java项目中一个软件包中的一个函数中执行一个.exe文件。现在,工作目录是Java项目的根目录,但.exe文件位于项目的子目录中。这是项目的组织方式:

ROOT_DIR
|.......->com
|         |......->somepackage
|                 |.........->callerClass.java
|
|.......->resource
         |........->external.exe

最初,我尝试直接通过以下方式运行.exe文件:

String command = "resources\\external.exe  -i input -o putpot";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

但是问题是外部.exe需要访问其自己目录中的某些文件,并一直认为根目录是其目录。我什至尝试使用.bat文件来解决问题,但是出现了同样的问题:

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "resources\\helper.bat"});

.bat文件与.exe文件位于同一目录中,但是会发生相同的问题。这是.bat文件的内容:

@echo off
echo starting process...

external.exe -i input -o output

pause

即使将.bat文件移至根目录并修复其内容,问题也不会消失。请帮助


问题答案:

要实现此目的,您可以使用ProcessBuilder类,如下所示:

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("\n");
}
s.close();

int result = process.waitFor();

System.out.printf( "Process exited with result %d and output %s%n", result, text );

这是一堆代码,但是可以让您进一步控制流程的运行方式。



 类似资料:
  • 问题内容: 如何在Java程序中更改当前工作目录?我已经找到的关于该问题的所有信息都声称你根本做不到,但我不敢相信确实如此。 我有一段代码可以使用通常从其开始的目录中的硬编码相对文件路径打开文件,而我只想能够从其他Java程序中使用该代码而不必从内部启动特定目录。看来你应该可以拨打,但据我所知,仅默默地拨打那条电话就行不通了。 我会理解,如果Java不允许你这样做,或者不是因为Java允许你获取当

  • 我已经下载了jdk 1.8.0\u 131 当我打开命令提示符并编写以下命令-java-version时,它会给出输出 但是当我编写以下命令时:javac-version它会给我输出 我已经编辑了系统变量路径-C:\Progra~1\Java\jdk1.8.0_131\bin; 当我执行以下命令时:"C:\Program Files\Java\jdk1.8.0_131\bin\javac"-ver

  • 问题内容: 在泊坞窗中,我想这样做: 但是,因为没有cd命令,所以每次都必须传递完整路径(使XYZ / fullpath)。有什么好的解决方案吗? 问题答案: 您可以运行脚本,也可以运行更复杂的参数。这是我先前下载的Dockerfile中的示例: 由于使用了“ &&”,如果所有先前的命令都成功,它将仅到达最终的“ pip install”命令。 实际上,由于每个RUN都会创建一个新的提交和AUFS

  • 所以我正在编辑一个插件,是为我的世界龙头。 在反编译程序/调试器中,这就是“FlyCommand”显示的内容。在我下面上课。龙卷风915。蓬松的 https://pastebin.com/KB3jLX7S 下面是我的intellij项目中显示的同一个文件。 https://pastebin.com/kqX3DzTu 我想换个角色 我从intellij假设这是它需要编辑的地方。但是我不知道如何改变,

  • 问题内容: 我在一个bat文件中有以下命令。 在STEP13中,在npminstall命令不起作用之后。它不会返回到父HDC文件夹。我还有其他命令要在父文件夹中运行。我是否犯了一些语法错误? 问题答案: 在Windows上是Windows批处理脚本,具有文件扩展名,而不是可执行文件,在这种情况下,该脚本会修改当前目录,并且在退出前不会还原该目录。 我建议使用代替 命令 并使用代替 命令 有关这两个

  • 我已经使用cocoapods安装了swiftlint,它工作正常 但当我试图在终端中使用命令时,它给出了以下错误 我是否需要做任何其他设置,使命令在终端工作? 注意:由于Mac上的一些限制,不能使用SwiftLint包。