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/