【问题标题】:Loading .txt file within JAR在 JAR 中加载 .txt 文件
【发布时间】:2014-12-24 03:15:26
【问题描述】:

我有一个db.properties.txt 文件和我的包com.noteu

在与文件相同的包中,我试图将它加载到数据库类中属性对象的构造函数中,如下所示:

properties.load(Database.class.getResourceAsStream("db.properties.txt"));

但是我得到一个java.lang.NullPointerException 如下:

Exception in thread "main" java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Unknown Source)
    at java.util.Properties.load0(Unknown Source)
    at java.util.Properties.load(Unknown Source)
    at com.noteu.Database.get(Database.java:24)
    at com.noteu.menus.Signin.checkSignedInStatus(Signin.java:52)
    at com.noteu.menus.Signin.<init>(Signin.java:253)
    at com.noteu.Main.main(Main.java:33)

【问题讨论】:

  • 考虑使用路径“/com/noteu/db.properties.txt”(或“com/noteu/db.properties.txt”,我通常在遇到问题时都尝试)。如果属性文件与数据库类存在于同一目录中并且您没有使用静态上下文,则可以尝试使用 getClass().getResourceAsStream() 代替(使用相对路径)
  • 您是否确认 .jar 文件包含 com/noteu/db.properties.txt 条目?如果不是,则 .jar 的打包方式可能存在问题。
  • 用 7zip/WinZip 或其他软件打开 jar(zip 格式),并检查文件是否存在:区分大小写,在包文件夹中。可能是您需要将文件不在 /src/(main/)java 下,而是 /src/main/resources/com/noteu/ 左右。

标签: java properties fileinputstream


【解决方案1】:

将文件类型更改为.propertiesproperties.load(); 加载properties 文件而不是txt 文件作为流。

public void load(InputStream inStream) throws IOException

从输入字节流中读取属性列表(键和元素对)。

修改代码:

properties.load(Database.class.getResourceAsStream("db.properties"));

要加载 .txt 文件而不是属性文件,您必须创建 FileInputStream 实例。

FileInputStream fis new FileInputStream("myfile.txt");
props.load(fis)

如果我的解决方案不起作用,请确保您的路径是 正确。

【讨论】:

  • @MadProgrammer 我同意扩展是无关紧要的,但 java 本身指定 load() 方法采用输入流。我已经使用FileInputStream 指定了另一个选项,它是否有效。
  • OP 正在(显然)尝试加载嵌入式资源,可能的原因是路径错误
  • 您不必使用 FileInputStream 读取 .txt 文件。绝对可以使用 Class.getResourceAsStream 读取任何类型的文件。
猜你喜欢
  • 2011-05-31
  • 2013-01-04
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多