Java 如何读取JAR中的文本文件?
我试图做的是在程序的JAR中存储一个文本文件(不会更改),以便可以读取它。文本文件的用途是由我的一个类读入,并且文本文件的内容将添加到Java 如何读取JAR中的文本文件?,java,file,text,jar,embedded-resource,Java,File,Text,Jar,Embedded Resource,我试图做的是在程序的JAR中存储一个文本文件(不会更改),以便可以读取它。文本文件的用途是由我的一个类读入,并且文本文件的内容将添加到JEditorPane。该文件基本上是一个教程,当用户点击阅读教程的选项时,文件内容将被读取并显示在弹出的新窗口中 我已经放下了它的GUI部分,但至于将文件存储在JAR中以便可以访问它,我就不知所措了。我已经读到使用InputStream可以工作,但是在尝试了一些事情之后,我还没有让它工作 我还将图像存储在JAR中,用作GUI窗口的图标。这是通过以下方式实现的:
JEditorPane
。该文件基本上是一个教程,当用户点击阅读教程的选项时,文件内容将被读取并显示在弹出的新窗口中
我已经放下了它的GUI部分,但至于将文件存储在JAR中以便可以访问它,我就不知所措了。我已经读到使用InputStream
可以工作,但是在尝试了一些事情之后,我还没有让它工作
我还将图像存储在JAR中,用作GUI窗口的图标。这是通过以下方式实现的:
private Image icon = new ImageIcon(getClass()
.getResource("resources/cricket.jpg")).getImage();
但是,在尝试获取文件时,这不起作用:
private File file = new File(getClass.getResource("resources/howto.txt"));
这是我现在的班级:
public class HowToScreen extends JFrame{
/**
*
*/
private static final long serialVersionUID = -3760362453964229085L;
private JEditorPane howtoScreen = new JEditorPane("text/html", "");
private Image icon = new ImageIcon(getClass().getResource("resources/cricket.jpg")).getImage();
private BufferedReader txtReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/howto.txt")));
public HowToScreen(){
setSize(400,300);
setLocation(500,200);
setTitle("Daily Text Tutorial");
setIconImage(icon);
howtoScreen.setEditable(false);
howtoScreen.setText(importFileStream());
add(howtoScreen);
setVisible(true);
}
public String importFile(){
String text = "";
File file = new File("howto.txt");
Scanner in = null;
try {
in = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while(in.hasNext()){
text += in.nextLine();
}
in.close();
return text;
}
public String importFileStream(){
String text = "";
Scanner in = new Scanner(txtReader);
while(in.hasNext()){
text += in.nextLine();
}
in.close();
return text;
}
}
忽略importFile
方法,因为它将被删除,以便将教程文件存储在JAR中,使程序完全独立,因为程序可以使用的空间有限
编辑:
在尝试了下面的所有建议之后,我检查了我的JAR是否正在将文本文件打包在其中,而不是。当使用7zip打开JAR时,在我的资源文件夹中,我用于图标的图片在那里,但不是文本文件。您不能在JAR文件中使用文件。您需要使用InputStream来读取文本数据
BufferedReader txtReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/mytextfile.txt")));
// ... Use the buffered reader to read the text file.
您的代码将无法编译。返回
URL
,并且文件
没有以URL
作为参数的构造函数
您只需使用.getResourceAsStream()
即可,它直接返回一个InputStream
,您只需从该流读取文件的内容即可
注意:如果找不到资源,这两种方法都会返回null:不要忘记检查…尝试下一种方法(使用完整路径包):
文本文件的内容将添加到JEditorPane
看&尤其是
由于帮助是一个链接,因此需要使用getResource(String)
获取URL
,如中所述
。。尝试了以下操作:URL URL=this.getClass().getResource(“resources/howto.txt”)代码>
更改:
URL url = this.getClass().getResource("resources/howto.txt");
致:
描述“不起作用”的含义。如果出现错误,请向我们显示错误。另请参阅“我检查了我的JAR是否正在打包文本文件”Smart move.:)是的,我不完全确定为什么在我使用Eclipse导出可运行的JAR时不包括它。“我用于图标的图片在那里,但不是文本文件。”在任何答案都可以工作之前,必须先解决这个问题。以防在这方面有任何混乱。您可能会1)显著地编辑此问题。。或者2)开始一个新的问题,关于Eclipse构建中缺少的资源。到目前为止,我从InputStream得到的所有信息都是null,但文件在那里。还有一个问题。您的图像加载是否正确?图像加载是否正确,但到目前为止,文本文件是我唯一想做的事情。请尝试在路径前面加一个/
。另外,尝试将此文件放置在与图像相同的位置,使用相同的路径,查看是否加载。尝试使用前缀wtih/并且文件(howto.txt)位于相同的文件夹位置。代码在以下位置运行NullPointerException:streamReader=new InputStreamReader(inputStream,“UTF-8”);当它试图获取文件时,也会抛出一个NullPointerException;howtoScreen.setPage(url);有了这段代码,我得到了一个错误的url异常,因此我的程序不知怎么地找不到该文件?不幸的是,这不起作用。howto.txt
就是这样,而不是howto.txt
(大小写很重要)?资源位于Jarresources/howto.txt
的路径中?提供.jar的输出jar-tvf
yes,文本是“howto.txt”,没有大写字母。我不知道你想从“jar-tvg the.jar”中得到什么。我猜这是某种命令行?这是jar-tvf the.jar
的内容列表,是的,来自命令行。
URL url = this.getClass().getResource("resources/howto.txt");
URL url = this.getClass().getResource("/resources/howto.txt"); // note leading '/'