gpt4 book ai didi

java - 通过 ProcessBuilder 调用的可执行文件找不到需要的文件

转载 作者:行者123 更新时间:2023-11-28 22:27:10 24 4
gpt4 key购买 nike

我有一个正在运行的 java servlet,我向其发送了一个文件。然后将此文件传递给创建网页的可执行文件 ( https://github.com/potree/PotreeConverter )。我这样做的方法是使用 ProcessBuilder。然而奇怪的事情发生了......

Potree 可执行文件位于我 PC 上的一个目录中,在此目录中有一个名为 resources 的子文件夹。这些是 Potree 可执行文件构建网页所需的资源。

每当我从 java servlet 通过 processbuilder 调用 potree 可执行文件时,它告诉我找不到资源文件夹:

    System.out.println("Creating webpage...");
ProcessBuilder processBuilder = new ProcessBuilder(POTREE_EXE, file.getAbsolutePath(), "-o", XAMPP_DIR, "-p", "pageName", "--overwrite");
processBuilder.redirectError(Redirect.INHERIT);
processBuilder.redirectOutput(Redirect.INHERIT);
try {
Process p = processBuilder.start();
p.waitFor();
} catch(IOException e) {
System.out.println(e.getMessage());
} catch(InterruptedException e) {
System.out.println(e.getMessage());
}
}

当我尝试通过 CMD 直接使用 potree 可执行文件时,找到它的资源文件夹没有问题。我转到 CMD 中的 potree 文件夹,然后执行与 processbuilder 完全相同的代码行。现在可执行文件能够找到资源文件夹...

java servlet 在 tomcat 8.0 服务器上运行...可能必须处理以下事实:processbuilder 从位于 tomcat 文件夹中的 servlet 中调用可执行文件,而不是直接从其执行的 potree 可执行文件自己的文件夹?

这里到底出了什么问题,有没有办法解决这个问题?

最佳答案

file.getAbsolutePath()这里是虚假的安全性:如果文件是相对路径,它只会将当前文件夹附加到您的文件。除非您计划chdir,否则没有必要在您的代码中某处或获取准确的错误消息。

你几乎自己回答了:

  • 在文件的相对路径有效的目录中运行时,它有效。

<potree dir>
<potree dir>/yourexecutable
<potree dir>/resource/yourfile (file.getAbsolutePath() returns that and that's correct, file is here)

  • 从另一个目录运行时,嗯

<another dir>
<another dir>/resource/yourfile (file.getAbsolutePath() returns that and the file does not exist here)

因此,您必须在配置文件或硬编码中传递一个“根文件夹”,所有资源文件和目录都来自该位置。

始终从该根文件夹构建文件名。

根据语言的不同,还有多种技术可以从启动脚本自动计算它。

关于java - 通过 ProcessBuilder 调用的可执行文件找不到需要的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com