java - URI 没有层次结构。如何使用 getResourceAsStream 获取文件路径

标签 java deployment subdirectory

private void generateDATFiles() throws Exception {
    File shellScriptPath= new File((this.getClass().getResource("/Vorlagen/Simulation/test.sh").toURI()));
    ProcessBuilder pb = new ProcessBuilder(shellScriptPath.getAbsolutePath());
    Process p = pb.start();
}

所以我有一个要执行的 shell 脚本。问题是我需要文件路径,并且可以使用 getResource 获取它,但我得到的错误是我的 uri 不是分层的,因此我发现我需要使用 getResourceAsStream 来避免该错误,但我的问题是如何使用 getResourceAsStream 获取文件路径?

最佳答案

不幸的是,这并不是一件容易的事。如果将 .sh 脚本与程序的其他部分一起打包在一个 .jar 中,它将无法工作。您只能将其作为资源流访问,而不能作为 URI 访问(即使在开发模式下您可以获得实际的 URI)。这是因为 .sh 和类文件以及所有内容实际上都位于文件系统 (.jar) 的同一个文件中。

与其说这是 Java 的限制,不如说是操作系统的限制。如果 .sh 捆绑在 jar/war/任何其他存档中,则无法从 java 代码运行它。 (实际上您也无法从命令提示符执行此操作)。

为了解决这个问题,您可以获取输入流并将内容写入临时文件中(您可以使用 java createTempFile 功能),然后执行该文件。或者您可以从 jar(zip) 中提取 .sh 文件并执行它

关于java - URI 没有层次结构。如何使用 getResourceAsStream 获取文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51705451/

相关文章:

java - 写入 Zip 中的子目录?使用 java.util.zip。 ZipEntry.putNextEntry()

powershell - 使用Powershell动态查找并替换子文件夹中多个特定文件中的文本

php - 使用 html2text 设置目录以包含子目录

java - getServletContext().getAttribute() 重置值?

java - 以编程方式声明变量

clojure 中的 Java lambda 回调

visual-studio - Web 部署不再有效

java - 如何创建多个 JAR 文件的单个 exe 文件?

deployment - Capistrano 编译 Assets 错误 - Assets :precompile:nondigest?

java - 在 Eclipse 中导出我的 Java 程序