【问题标题】:Accessing a file within Java project访问 Java 项目中的文件
【发布时间】:2012-11-08 20:24:38
【问题描述】:

我有一个使用第三方应用程序的 Java 项目。我将许可证文件(.lic 格式)存储在资源文件夹中。运行 Ant 脚本后,它将将该文件复制到 /lib/jar 目录中,因为它将项目汇总到 Jar 文件中以在服务器上使用。这是我在实时运行系统时需要访问文件的地方。这是文件夹结构的样子

MyProject
  src
    package
      AccessingClass.java
  resources
    File.lic
  lib
    jar
      File.lic (upon copy from Ant)

我不确定执行此操作的最佳方法,因此除了我一直在尝试的方法之外的任何建议都可能会有所帮助。第 3 方项目有一个类中的方法,如 License.setLicense(),它可以将字符串带到位置或文件的 InputStream。

我一直在尝试给它一个 InputStream,但在调用 getClass().getResourceAsStream() 时总是得到一个空值。这是我尝试过的所有内容:

  • getClass().getResourceAsStream("../../../lib/jar/File.lic"); getClass().getResourceAsStream("/File.lic");

作为备份,我也尝试过(对于本地构建,我想我会尝试资源文件夹):

  • getClass().getResourceAsStream("../../../resources/File.lic"); getClass().getResourceAsStream("/File.lic");

是否有更好的方法来执行此操作?或者有人能告诉我为什么我正在尝试失败?提前谢谢。

【问题讨论】:

  • JAR 里面的什么位置(例如,如果你解压它,文件位于?lib/jar?资源?在根?

标签: java eclipse file-io


【解决方案1】:

您是在独立运行此代码还是在 IDE 环境中运行,这看起来像是类路径问题。如果您在命令提示符下运行,则必须将类路径设置为 lib 目录,如果在 ide 中确保资源目录位于类路径中。

【讨论】:

  • 我将 lib 和 resources 文件夹都添加到了本地 tomcat 服务器上的类路径(首先进行测试)和项目构建路径上。仍然收到 null。
【解决方案2】:

首先,您需要确保将JAR 添加到您的类路径中

下面应该可以工作。

  InputStream inputStream = 
    getClass().getClassLoader().getResourceAsStream("/resources/File.lic");

假设File.lic 放在jar 的根文件夹中。

【讨论】:

  • 它不在 Jar 文件夹的根目录中,但它是我上面指定的位置。我可以通过直接路径访问它,我只是不确定它会是什么样子。
  • @ozpenstillson:它在resources 文件夹中吗?您的 jar structore 没有提到相同的内容。您可以在文件名中使用从根目录开始的路径。我用详细信息更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2018-06-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多