在这里和其他地方对这个问题进行了广泛的研究,但没有找到有效的解决方案,我想我应该问问。。。
我有一个jar文件(部署在raspberrypi上),内部结构如下:
我的应用程序
我的班级
....
文本文件
foo.txt文件
....
我需要'myclass'来读'foo.txt'。
这里和其他地方的一般建议是使用以下内容:
InputStream in = getClass().getResourceAsStream("../textFiles/foo.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
我还了解到,要使用的路径(作为getresourceasstream()的参数)是目标文件的路径,相对于读取文件的类的位置。(..?)
但是,无论我使用哪条路径,我都无法使上述两条线正常工作。我总是被第二条线抛出一个npe。
我假设npe指示'in'为null,因为没有找到'foo.txt'。
任何能成功解决问题的建议,敬请接受。
干杯
保罗
2条答案
按热度按时间arknldoa1#
尝试删除
..
从路径,根据文档:如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称“/”后面的部分。
否则,绝对名称的形式如下:
modified_package_name/name
其中,修改的\u package \u name是此对象的包名,用“/”替换“.”(“\u002e”)。pkmbmrz72#
所以我眼前的问题已经解决了,但我并不满意。
我重新定位了“textfiles”的内容(在jar中),所以所有的文本文件都在jar的根目录中。然后,我成功地使用以下方法找到并加载了文件:
然而,我仍然不明白为什么这是有效的。我不明白为什么“/textfiles/foo.txt”不起作用,当文件在那个子目录下,从jar的根目录下。。。?
不管怎样…我现在有一个新问题,我认为是硬件相关的…读取文件大约需要40秒!!我想我应该怪我的树莓皮里面的旧sd卡。
但这是另一天的问题!
谢谢你的意见。