【问题标题】:Using resources independent of file location使用独立于文件位置的资源
【发布时间】:2012-10-04 14:33:05
【问题描述】:

这是我的目录结构
XYZ项目

  • 构建
  • 分布
  • nbproject
  • 源代码

我正在研究 netbeans。
现在我有一个名为 ABC.txt
的文件 我想把它打包到 jar 文件中。
现在我做了以下事情:在源包下创建一个名为 Resources 的新文件夹,并将文件 ABC.txt 放入其中。

XYZ项目

-- src  
  |
  -- Resources  
     |
     -- ABC.txt

现在我想独立于文件位置访问此文件。所以我按照一些教程做了这个,

URL url = XYZProject.class.getClassLoader().getResource("Resources/ABC.txt");
String urlStr = urlStr.getFile().replaceAll("%20", " ");
System.out.println(urlStr);
BufferedReader reader;
try {
    reader = new BufferedReader(new FileReader(urlStr)); .....
} catch (FileNotFoundException e) {...}

现在,当我通过 netbeans (即 F6 和 tada WORKS)运行代码时,这可以正常工作!!!
但是当尝试运行 jar 时,它找不到该文件。它抛出 FileNotFoundException
如何访问通过 netbeans 和 java -jar 运行的 jar 中的文本文件?
我也不知道为什么我得到的网址中有一个 %20 而不是空格。

输出运行 VIA NB

/D:/.../.../.../.../XYZProject/build/classes/Resources/ABC.txt  

运行VIA java -jar的输出

file:/D:/.../.../.../.../XYZProject/dist/XYZProject.jar!/Resources/ABC.txt

【问题讨论】:

    标签: java url jar classloader embedded-resource


    【解决方案1】:

    Jar 中的资源不是File。必须通过URLInputStream 访问。

    我可能会使用URL -> InputStream -> InputStreamReader -> BufferedReader(来自记忆,未经测试)。

    【讨论】:

    • 那么在这种情况下,我将如何访问 jar 中的 txt 文件?
    • reader = new BufferedReader(new InputStreamReader(url.openStream()));这成功了。谢谢
    • 图片也一样吗?像图标等的图像,您将它们作为输入流访问?
    猜你喜欢
    • 2014-01-28
    • 2013-05-28
    • 1970-01-01
    • 2016-01-18
    • 2018-03-05
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多