URI不是分层的。如何使用getResourceAsStream获取文件路径

时间:2018-08-06 10:22:46

标签: 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获取文件路径?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

尝试用这种方式做。

class J{

   public static void main (String a[]){  
   {
     System.out.println(J.class.getResourceAsStream("/file.txt")
   }
}