【问题标题】:Loading Properties File from Static Context从静态上下文加载属性文件
【发布时间】:2013-04-26 23:21:37
【问题描述】:

我最近发现自己面临一个非常有趣的问题。我的应用程序中有一个properties 文件,我正在尝试从静态上下文中加载它。 properties 文件是从类Image 加载的,该类是一个静态类。在 Eclipse 中它工作正常,但是当我尝试将它导出为 JAR 时,它显然不起作用。

prop.load(new FileInputStream(new  File(Images.class.
getClassLoader().
getResource("config.properties").
toString())));

这是我已经尝试使用的行,但是当我尝试运行程序时,它会抛出此错误:

Exception in thread "main" java.lang.NullPointerException
    at controllers.Images.loadImageFiles(Images.java:47)
    at views.World.<init>(World.java:55)
    at views.World.main(World.java:40)

我有点不知所措,所以我的问题是:

如何从静态上下文加载资源,更重要的是,在执行此操作之前是否需要将文件注册为资源?

编辑

经过一番搜索,我确定返回 null 的是 getResource 方法。我想我现在最大的问题是为什么!?我的文件结构如下:

Project
        src
             controllers <-- This is where the Images class is.
             models
             views
             img
             doc
             config.properties <-- This is the file I want.

我不完全确定这会有什么帮助,但我一直在寻找答案。

【问题讨论】:

  • getResource("/config.properties") 有效吗?
  • 不,试过几次。 @NoobUnChained
  • 当您访问 jar 中的文件时,您需要更改获取它们的方式。见stackoverflow.com/questions/3831845/get-resource-from-jar。请参阅@davmos 的答案。
  • 请注意,问题不是从静态上下文调用资源,而是它在 jar 中。
  • 同意。道歉。三个小时后,我的头脑变得越来越没有能力。 Davmos 的回答是最初加载图像。现在我有很多路径,但我不知道如何阅读它们! IT 变得更好了:P

标签: java properties resources


【解决方案1】:

将属性文件放在与类相同的目录中,并改用getResourceAsStream() 方法。它将返回一个InputStream,因此无需构造File。如果您将类打包在 jar 中,它也将继续工作......

Properties prop = new Properties();

prop.load(Images.class.getClassLoader().getResourceAsStream("config.properties"));

或来自静态上下文:

prop.load(ClassLoader.class.getResourceAsStream("config.properties"));

【讨论】:

  • 在静态上下文中没有 getClass() 方法。你在什么对象上调用 getClass()?
猜你喜欢
  • 2021-06-07
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2015-11-02
  • 2011-06-20
  • 2015-12-15
相关资源
最近更新 更多