java—从远程设备上的jar中读取文本文件

1mrurvl1  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(232)

在这里和其他地方对这个问题进行了广泛的研究,但没有找到有效的解决方案,我想我应该问问。。。
我有一个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'。
任何能成功解决问题的建议,敬请接受。
干杯
保罗

arknldoa

arknldoa1#

尝试删除 .. 从路径,根据文档:
如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称“/”后面的部分。
否则,绝对名称的形式如下: modified_package_name/name 其中,修改的\u package \u name是此对象的包名,用“/”替换“.”(“\u002e”)。

pkmbmrz7

pkmbmrz72#

所以我眼前的问题已经解决了,但我并不满意。
我重新定位了“textfiles”的内容(在jar中),所以所有的文本文件都在jar的根目录中。然后,我成功地使用以下方法找到并加载了文件:

InputStream in = getClass().getResourceAsStream("/foo.txt");

然而,我仍然不明白为什么这是有效的。我不明白为什么“/textfiles/foo.txt”不起作用,当文件在那个子目录下,从jar的根目录下。。。?
不管怎样…我现在有一个新问题,我认为是硬件相关的…读取文件大约需要40秒!!我想我应该怪我的树莓皮里面的旧sd卡。
但这是另一天的问题!
谢谢你的意见。

相关问题