如何读取jar中的文本文件?

5jvtdoz2  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(444)

这个问题在这里已经有答案了

java资源文件(6个答案)
7年前关门了。
我试图做的是在程序的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时,在我的资源文件夹中,我用于图标的图片在那里,而不是文本文件。

1aaf6o9v

1aaf6o9v1#

你的代码不会编译。 Class.getResource() 返回一个 URL ,和 File 没有具有 URL 作为论据。
你可以用 .getResourceAsStream() 相反,它返回一个 InputStream 直接地,您只需从该流中读取文件的内容。
注意:这两种方法都返回 null 如果找不到资源:不要忘记检查。。。

tag5nh1u

tag5nh1u2#

不能在jar文件中使用文件。您需要使用inputstream来读取文本数据。

BufferedReader txtReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/mytextfile.txt")));

// ... Use the buffered reader to read the text file.
fhg3lkii

fhg3lkii3#

文本文件的内容将添加到 JEditorPane .
看到了吗 DocumentVewer &尤其是 JEditorPane.setPage(URL) .

由于帮助是一种嵌入式资源,因此有必要获得 URL 使用 getResource(String) 如信息中所述。第页。
.. 试过这个: URL url = this.getClass().getResource("resources/howto.txt"); 更改:

URL url = this.getClass().getResource("resources/howto.txt");

收件人:

URL url = this.getClass().getResource("/resources/howto.txt");  // note leading '/'
mlmc2os5

mlmc2os54#

尝试下一个(使用完整路径包):

InputStream inputStream = ClassLoader.getSystemClassLoader().
        getSystemResourceAsStream("com/company/resources/howto.txt");
InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader in = new BufferedReader(streamReader);

for (String line; (line = in.readLine()) != null;) {
    // do something with the line
}

相关问题