我目前正在将一个程序放入.jar,并且很难告诉它从哪里获取数据。数据位于项目中的文件内部,我确信它也位于jar中。但我不知道如何获得一个罐子的路径。
我在网上找到了getClass().getClassLoader().getResourceAsStream()
方法来获取输入流到jar中,但由于我一直使用FileReaders
,所以我也不知道该怎么做..
我非常感谢任何帮助。
编辑:
以下是目录组织方式的图片:
我的命令窗口显示如果我运行.jar会发生什么。第30行中的Nullpointer。我尝试使用和不使用.getClassLoader(),它只是找不到它。 这是jar的内部: 再次,app是类文件所在的位置。因此,通过class.getResource ..我应该能够在DataPackeg中搜索。伙计,这是我的意思。
答案 0 :(得分:4)
要理解的一个关键概念是, 文件不存在于jar中 。您必须将数据作为只读资源获取,并且需要使用相对于类文件路径的路径。
如果你仍然卡住了,你可能需要告诉我们更多关于你当前程序,结构,你想要获得的数据类型,它在jar文件中的位置,以及你是如何试图使用它。
例如,假设您的包结构如下所示:
所以类文件位于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();
}
}