【问题标题】: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")
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多