Java 如何读取JAR中的文本文件?

Java 如何读取JAR中的文本文件?,java,file,text,jar,embedded-resource,Java,File,Text,Jar,Embedded Resource,我试图做的是在程序的JAR中存储一个文本文件(不会更改),以便可以读取它。文本文件的用途是由我的一个类读入,并且文本文件的内容将添加到JEditorPane。该文件基本上是一个教程,当用户点击阅读教程的选项时,文件内容将被读取并显示在弹出的新窗口中 我已经放下了它的GUI部分,但至于将文件存储在JAR中以便可以访问它,我就不知所措了。我已经读到使用InputStream可以工作,但是在尝试了一些事情之后,我还没有让它工作 我还将图像存储在JAR中,用作GUI窗口的图标。这是通过以下方式实现的:

我试图做的是在程序的JAR中存储一个文本文件(不会更改),以便可以读取它。文本文件的用途是由我的一个类读入,并且文本文件的内容将添加到
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
(大小写很重要)?资源位于Jar
resources/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 '/'