【问题标题】:reading a text file from within a Jar on a remote device从远程设备上的 Jar 中读取文本文件
【发布时间】:2021-03-12 12:17:32
【问题描述】:

在这里和其他地方广泛研究了这个问题,但没有找到有效的解决方案,我想我会问...

我有一个 jar 文件(部署在 RaspberryPi 上),其内部结构如下:

  • 我的应用程序
    • 我的班级
    • ....
  • 文本文件
    • foo.txt
    • ....

我需要“MyClass”来阅读“foo.txt”。

这里和其他地方的一般建议是使用以下内容:

InputStream in = getClass().getResourceAsStream("../textFiles/foo.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

我还读到要使用的路径(作为 getResourceAsStream() 的参数)是目标文件的路径,相对于类的位置读取文件。(..?)

但是,无论我使用哪种路径,我都无法使上述 2 行工作。我总是得到第二行抛出的 NPE。

我假设 NPE 指示 'in' 为空,因为尚未找到 'foo.txt'。

任何有助于成功解决问题的建议,我们都非常感激。

干杯

保罗

【问题讨论】:

  • 您需要确保文件路径正确。

标签: java file jar


【解决方案1】:

尝试按照documentation从路径中删除..

  • 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。
  • 否则,绝对名称的格式如下:
    modified_package_name/name
    其中 modified_pa​​ckage_name 是此对象的包名称,其中 '/' 替换为 '.' ('\u002e')。

【讨论】:

  • 我在这里无处可去...我已经尝试过(基于上面的 jar 结构)...
  • 我在这里无处可去...我已经尝试过(基于上面的 jar 结构):“../textFiles/foo.txt”、“/textFiles/foo.txt”、“ textFiles/foo.txt", "/foo.txt" & , "foo.txt". 全部未找到。 (是的..文件和目录名称是正确的)
【解决方案2】:

所以我眼前的问题已经解决了,但我并不满意。

我重新定位了“textFiles”的内容(在 Jar 中),所以所有文本文件都在 Jar 的根目录中。然后我成功地找到并使用以下方法加载文件:

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

但是,我仍然不明白为什么会这样。我不明白为什么“/textFiles/foo.txt”不起作用,当文件位于该子目录中时,离开 Jar 的根目录...?

无论如何...我现在有一个新问题,我认为这与硬件有关....读取文件大约需要 40 秒!我想我怪我的 Raspberry Pi 中的旧 SD 卡。

但这是另一天的问题!

感谢您的意见。

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 2012-10-09
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多