【问题标题】:Accessing Data inside of a .jar访问 .jar 中的数据
【发布时间】:2011-09-24 02:14:58
【问题描述】:

我目前正在将一个程序放入 .jar 中,但很难告诉它从哪里获取数据。数据位于项目的文件中,我确信它也位于 jar 中。但我不知道如何进入罐子。

我在网上找到了getClass().getClassLoader().getResourceAsStream()的方法来获取jar的输入流,但是由于我一直使用FileReaders,所以我也不知道如何处理它..

我会非常感谢任何帮助。

编辑:

这是目录组织方式的图片:

我的命令窗口显示了如果我运行 .jar 会发生什么。第 30 行中的 Nullpointer。我尝试了使用和不使用 .getClassLoader(),它就是找不到它。 这是罐子的内部: 同样,app 是类文件所在的位置。因此,通过 class.getResource.. 我应该能够在 DataPackeg 中搜索。伙计,这让我筋疲力尽。

【问题讨论】:

    标签: java jar iostream


    【解决方案1】:

    要理解的一个关键概念是文件不存在于 jar 中。相反,您必须将数据作为只读资源获取,并且您需要使用与类文件路径相关的路径。

    如果您仍然卡住,您可能需要告诉我们更多关于您当前程序的细节、它的结构、您要获取的数据类型、它在 jar 文件中的位置以及您的情况尝试使用它。

    例如,假设您的包结构如下所示:

    所以类文件位于 codePackage 包中(这是 Eclipse,因此类文件存在于与 java 文件平行的宇宙中),资源的位置在 codePackage.images 包中,但是 相对于类文件它是图像目录,你可以像这样使用资源:

    package codePackage;
    
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;
    import javax.swing.*;
    
    public class ClassUsesResources {
       private JLabel label = new JLabel();
    
       public ClassUsesResources() {
          try {
             BufferedImage img = ImageIO.read(getClass().getResourceAsStream(
                   "images/img001s.jpg"));
             ImageIcon icon = new ImageIcon(img);
             label.setIcon(icon);
    
             JOptionPane.showMessageDialog(null, label);
          } catch (IOException e) {
             e.printStackTrace();
             System.exit(-1);
          }
       }
    
       public static void main(String[] args) {
          new ClassUsesResources();
       }
    }
    

    【讨论】:

    • 我的程序读取文本文件。它们与 bin、src 类路径一起位于项目文件夹中。我使用标准 eclipse 选项将其转换为可运行的 jar。以前,我只是将 FileReader(path) 放入 BufferedReader 并逐行读出。
    • 是的,您的程序使用读取文本文件。现在它将需要读取文本资源。 BufferedReader 可以使用 InputStream,您可以使用 getResourceAsStream 方法获取该 Stream。只需确保传入相对于类文件位置的路径即可。
    • Will BufferedReader br = new BufferedReader(new InputStreamReader( getClass().getClassLoader().getResourceAsStream("Name.txt")); 我认为它应该可以工作,但我的命令行告诉我那里是空指针异常 - 即使我从原始路径复制了文件名。我似乎还有另一个错误?
    • 抱歉,我已经回答了这个问题:请在此处重新阅读我的回答,了解资源的路径应该是什么。
    • 也许您想显示 jar 的“文件”结构的图像,包括类文件所在的位置以及您的资源所在的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2012-11-28
    • 2015-01-15
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多