从jar包中读取txt文件失败,但读取图片可以。

3

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

我使用 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

2
您的IDE(项目)设置将.png视为资源,但不将.txt文件视为资源。 - Jayan
@user2383064,你能否请写出 clock 包的完整目录? - Azad
1
请注意,就URL而言,input.txtInput.txtinput.TXT是不同的。您确定该名称的大小写吗?请将jar -tvf the.jar提供给我们(编辑问题并使用代码格式),以便我们可以查看它。 - Andrew Thompson
我同意@AndrewThompson的观点,因为在你的情况下,NullPointerException的一个可能原因是文件路径错误。 - Azad
1
好的,我的猜测是错误的。 :-/ 但现在仔细再次查看源代码,尝试一下.. URL url = getClass().getResource("/clock/input.txt"); InputStream name = url.openStream();(我记得AsStream变体与getResource稍微处理路径有所不同 - 我确信它应该适用于后者。) - Andrew Thompson
显示剩余8条评论
1个回答

7
再仔细查看源代码,尝试...
URL url = getClass().getResource("/clock/input.txt"); 
InputStream name = url.openStream(); 

我记得Class::getResourceAsStream这个变量处理路径的方式与简单的Class::getResource不同 - 我肯定它对后者应该也适用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接