【问题标题】:Why does new File(path) doesn't work when I run my application from jar?当我从 jar 运行我的应用程序时,为什么 new File(path) 不起作用?
【发布时间】:2012-02-15 12:12:22
【问题描述】:

为什么当我从 jar 运行我的应用程序时,new File(path) 不起作用?我应该如何改变这个?现在,当我的应用程序尝试加载文件时,我收到 FileNotFound 异常。

final File file = new File("src/main/resources/maps/ParcelsCountyRDMFinal5.shp");

【问题讨论】:

  • 提供更多详细信息,如何给出路径?是相对的吗?等
  • 它在 Eclipse 中运行良好,但是当我在 cmd 中执行 java - jar 时会引发异常。
  • 我正在 main 方法中创建该文件。我使用了 Maven 阴影插件。当我解压缩我的 jar 时,map 文件夹位于包含我创建文件的类的包的文件夹旁边。我尝试使用 new File(object.getClass().getResources("maps/ParcelsCountyRDMFinal5.shp").getPath()) 但出现空指针异常。
  • 你能解压 jar 并查看 (1) 文件是否真正被包含,(2) 它的位置。理想情况下,maps 文件夹将位于第一层,在此之下您将拥有您的 shp 文件。如果是这样,您应该能够使用 obj.getClass().getResource("/maps/fileName") 获取它的 URL
  • 啊,我的回答有误。

标签: java file jar filenotfoundexception


【解决方案1】:

如果正确创建了 jar,比如使用 Maven,资源文件将位于类文件旁边。它看起来像这样:

myapp.jar
 |
 +--- com
 |     +---mycompany
 |            +-- FileOpsClass
 |
 +--- maps
        +-- fileToRead

你可以进入目录并访问fileToRead,就像上面的结构:

  final File file = new File("../../maps/ParcelsCountyRDMFinal5.shp");

或按照建议

  final File file = new File(getClass().getResource("/maps/ParcelsCountyRDMFinal5.shp"));

【讨论】:

    【解决方案2】:

    如果它已经在类路径中,你可以像这样得到它:

    File file = new File(getClass().getResource("Relative_Path_From_This_Class_To_YourFileName").getPath());
    

    【讨论】:

      【解决方案3】:

      运行 eclipse 时,当前工作目录设置为项目目录。因此相对路径有效。由于文件也被压缩到 jar 中,因此最好使用 InputStream 而不是文件。

      InputStream in = this.getClass().getResourceAsStream("/resources/maps/ParcelsCountyRDMFinal5.shp");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多