0

当我从 jar 文件中读取文件并将其放入 jTextArea 时,它会显示加密符号,而不是真实内容。

我在做什么:

public File loadReadme() {
    URL url = Main.class.getResource("/readme.txt");
    File file = null;

    try {
        JarURLConnection connection = (JarURLConnection) url
                .openConnection();
        file = new File(connection.getJarFileURL().toURI());

        if (file.exists()) {
            this.readme = file;
            System.out.println("all ok!");

        }
    } catch (Exception e) {
        System.out.println("not ok");
    }

    return file;
}

然后我读了文件:

public ArrayList<String> readFileToArray(File file) {
    ArrayList<String> array = new ArrayList<String>();
    BufferedReader br = null;

    try {

        String sCurrentLine;
        br = new BufferedReader(new FileReader(file));
        while ((sCurrentLine = br.readLine()) != null) {
            String test = sCurrentLine;
            array.add(test);

        }

    } catch (IOException e) {
        System.out.println("not diese!");

    } finally {
        try {
            if (br != null)
                br.close();
        } catch (IOException ex) {
        }
    }
    return array;
}

现在,我将 ArrayList 中的所有行放在 jTextArea 中,这向我展示了这样的内容:

PK����?����^��S?��3��� z_��
%�Q Tl?7��+�;���fK� �N��:k����� ]�Xk,������U"������q��\����%�Q#4x�|[���o�S{��:�aG�*sg�' .}����x����5��q���hpu�H���W�9���h2��Q����#���@7(�@�� ��F!��~��?����j�?\xA�/�Rr.�v�l�PK�bv�=

文本文件包含:

SELECTION:
----------
By clicking the CTRL Key and the left mouse button you go in the selection mode.
Now, by moving the mouse, you paint a rectangle on the map.

DOWNLOAD:
---------
By clicking on the download button, you start the download.
The default location for the tiles to download is: <your home>

我确定该文件存在!有谁知道问题是什么?我的“getResource”正确吗?

4

3 回答 3

1

根据输出,我怀疑您的代码实际上读取了 JAR 文件本身(因为它以 开头PK)。为什么不使用下面的代码来读取文本文件:

Main.class.getResourceAsStream("/readme.txt")

这将为您提供InputStream文本文件,而无需打开 JAR 文件等的麻烦。

然后,您可以将InputStream对象传递给readFileToArray方法(而不是File对象)并使用

br = new BufferedReader(new InputStreamReader(inputStream));

您的其余代码不需要任何更改。

于 2013-03-27T10:01:06.277 回答
0

这似乎是一个编码问题。FileReader不允许您指定。尝试使用

br = new BufferedReader(new InputStreamReader(new FileInputStream(file), yourEncoding));
于 2013-03-27T09:41:12.127 回答
0

你似乎在这里为自己做了太多的工作。您首先调用getResource,它会为您提供readme.txtJAR 文件中的条目的 URL,然后您获取该 URL,确定它指向的 JAR 文件,然后使用 a 打开该 JAR 文件FileInputStream并读取整个 JAR 文件。

相反,您可以简单地调用返回.openStream()的原始 URL,getResource这将为您提供一个InputStream您可以从中读取内容的readme.txt

br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

(如果readme.txt未以 UTF-8 编码,则酌情更改该参数)

于 2013-03-27T11:29:25.587 回答