【问题标题】:Adding .txt file as a resource Java添加 .txt 文件作为资源 Java
【发布时间】:2013-12-17 01:01:53
【问题描述】:

我有一个 .txt 文件和一个名为 res 的文件中的图像。我也将文件添加到我的路径中。我做了下面的代码,它在我的 Eclipse IDE 中工作得很好。导出 jar 并运行它时,它什么也不做。用 cmd 运行 jar 说找不到类路径。所以我尝试了第二段代码但没有成功。我在那里的图像工作正常。 bgi = new ImageIcon(getClass().getResource("bg.png"));

Scanner s = null;
        try {
            s = new Scanner(new File("res//10kaddress.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        ArrayList<String> paddress = new ArrayList<String>();
        while (s.hasNext()){
            paddress.add(s.next());
        }
        s.close();

所以我尝试在下面这样做,无论我做什么都不会读取 txt 文件

URL url = GUI.class.getResource("10kaddress.txt");
    File ff = new File(url.getPath());


    Scanner s = null;
    try {
        s = new Scanner(ff);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    ArrayList<String> paddress = new ArrayList<String>();
    while (s.hasNext()){
        paddress.add(s.next());
    }
    s.close();

得到这个错误

java.io.FileNotFoundException: C:\Users\Major%20Lee\Sketch\GUI\res\10kaddress.txt (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.util.Scanner.<init>(Unknown Source)
    at GUI.main(GUI.java:68)
Exception in thread "main" java.lang.NullPointerException
    at GUI.main(GUI.java:73)

任何帮助都会很棒。谢谢!

【问题讨论】:

标签: java file url embedded-resource getresource


【解决方案1】:

我会以 ResourceStream 的形式打开它(或者我只会使用 ResourceBundle),就像这样 -

InputStream is = getClass().getResourceAsStream("10kaddress.txt");
Scanner s = new Scanner(is);

【讨论】:

    【解决方案2】:

    当您将文件嵌入到 JAR 中时,您需要使用 getResourceAsStream(),正如已指出的那样。

    另外,我怀疑你的路径有问题。从错误中我可以看到您在 Windows 机器上。你的路径是:

    res//10kaddress.txt  
    

    转义分隔符时,使用/(单正斜杠)或\\(双反斜杠)。反斜杠带有另一个反斜杠,因此被称为被转义。尝试更改路径,看看是否适合您。

    所以,让你的路径为:

    res/10kaddress.txt   
    

    手动仔细检查文件是否指定的路径。

    【讨论】:

    • 不错的答案。 +1 我通常避免提及getResourceAsStream,因为它通常返回不可重新定位的流,而许多处理流的方法要求它们是可重新定位的(尤其是在处理媒体文件时)。所以我坚持使用getResource(..) 来获取URL。 URL.openStream() 返回的流可重新定位的。
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2015-10-20
    • 2018-04-10
    • 2011-08-07
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多