访问.jar中的数据

时间:2011-09-24 02:14:58

标签: java jar iostream

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

我在网上找到了getClass().getClassLoader().getResourceAsStream()方法来获取输入流到jar中,但由于我一直使用FileReaders,所以我也不知道该怎么做..

我非常感谢任何帮助。

编辑:

以下是目录组织方式的图片: The console displays a solution, since everything actually runs

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

1 个答案:

答案 0 :(得分:4)

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

如果你仍然卡住了,你可能需要告诉我们更多关于你当前程序,结构,你想要获得的数据类型,它在jar文件中的位置,以及你是如何试图使用它。

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

enter image description here

所以类文件位于codePackage包中(这是Eclipse所以类文件存在于与java文件并行的Universe中),并且资源的位置在codePackage.images包中,但 相对于类文件 它是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();
   }
}