【问题标题】:Reading txt file from jar fails but reading image works从 jar 读取 txt 文件失败,但读取图像有效
【发布时间】:2013-05-09 22:34:40
【问题描述】:

我有一个困扰我好几天的问题...我检查了类似的问题,但找不到解决方案。

我使用 NetBeans IDE。我构建了项目 jar 文件,即“Clock.jar”,其中包含一个名为“clock”的文件夹,其中可以找到一些图像、一个文本文件和所有项目类。 以下用于创建图像图标的代码有效

return new ImageIcon(getClass().getResource("/clock/button_close.png"));

但以下读取文本文件的代码失败

InputStream name = getClass().getResourceAsStream("/clock/input.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(name));

正如您可能已经猜到的那样,抛出了 NullPointer 异常意味着它可能无法找到文件。

但是为什么图像图标构造成功(通过将getResource返回的URL传递给它)但找不到txt文件(通过将getResourceAsStream的输入流传递给它)。

提前感谢您的任何回答(我是认真的:))

jar -tvf Clock.jar
0 Wed May 15 14:44:36 EEST 2013 META-INF/
202 Wed May 15 14:44:34 EEST 2013 META-INF/MANIFEST.MF
0 Wed May 15 14:44:36 EEST 2013 clock/
649 Wed May 15 14:44:36 EEST 2013 clock/Clock$1$1.class
789 Wed May 15 14:44:36 EEST 2013 clock/Clock$1.class
2026 Wed May 15 14:44:36 EEST 2013 clock/Clock.class
709 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$1.class
830 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$2.class
750 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$3.class
713 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$4.class
741 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$5.class
708 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$6.class
1081 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$7.class
981 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog$8.class
9640 Wed May 15 14:44:36 EEST 2013 clock/ClockDialog.class
702 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$1.class
708 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$2.class
734 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$3.class
743 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$4.class
531 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$5.class
1046 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame$6.class
9464 Wed May 15 14:44:36 EEST 2013 clock/ClockFrame.class
782 Wed May 15 14:44:36 EEST 2013 clock/ErrorReporter.class
1826 Wed May 15 14:44:36 EEST 2013 clock/IconButton.class
2693 Wed May 15 14:44:36 EEST 2013 clock/MessagePool.class
2824 Wed May 15 14:44:36 EEST 2013 clock/SystemInfo.class
2212 Wed May 15 14:44:36 EEST 2013 clock/button_close.png
6540 Wed May 15 14:44:36 EEST 2013 clock/button_close_highlighted.png
5668 Wed May 15 14:44:36 EEST 2013 clock/input.txt

【问题讨论】:

  • 代码是否在同一个类中(getClass()不同)?
  • 您的 IDE(项目)设置将 .png 视为资源,而不是 .txt 文件
  • @NilsH 不,不是,但两个类都在 jar 文件的同一目录中。
  • 请注意,就 URL 而言,input.txtInput.txt 不同,input.TXT 也不同。你确定那个名字的大小写吗?请给我们(edit 将其放入问题中并使用代码格式)jar -tvf the.jar,以便我们可以关注它。
  • 好的。我的怀疑是错误的。 :-/ 但是现在再次仔细查看源代码,尝试.. URL url = getClass().getResource("/clock/input.txt"); InputStream name = url.openStream();(我记得AsStream 变体处理路径与getResource 的处理方式略有不同 - 我相信它应该适用于后者。

标签: java image file text jar


【解决方案1】:

再仔细看源码,试试..

URL url = getClass().getResource("/clock/input.txt"); 
InputStream name = url.openStream(); 

我记得Class::getResourceAsStream 变体处理路径与Class::getResource 的处理方式略有不同——我相信它应该适用于后者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多