【问题标题】:URI is not hierarchical. How to get File Path using getResourceAsStreamURI 不是分层的。如何使用 getResourceAsStream 获取文件路径
【发布时间】:2019-01-13 06:50:08
【问题描述】:
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 获取文件路径?
【问题讨论】:
标签:
java
deployment
subdirectory
【解决方案1】:
不幸的是,这不是一件容易的事。如果将 .sh 脚本与程序的其他部分一起打包在一个 .jar 中,它将无法工作。您只能以资源流而不是 URI 的形式访问它(即使在开发模式下您可以获得实际的 URI)。这是因为 .sh 和类文件以及所有内容实际上都在文件系统 (.jar) 的同一个文件中。
与其说是操作系统限制,不如说是 Java 限制。如果 .sh 捆绑在 jar/war/任何其他存档中,则无法从 java 代码运行它。 (实际上,您也无法从命令提示符处执行此操作)。
为了解决它,您可以获取输入流并将内容写入临时文件(您可以使用 java createTempFile 功能),然后执行该文件。或者您可以从 jar(zip) 中提取 .sh 文件并执行它
【解决方案2】:
试着用这种方式做。
class J{
public static void main (String a[]){
{
System.out.println(J.class.getResourceAsStream("/file.txt")
}
}