【问题标题】:Reading a .txt file into JAR. It works in Eclipse but not in exported JAR将 .txt 文件读入 JAR。它适用于 Eclipse,但不适用于导出的 JAR
【发布时间】:2014-06-01 02:50:09
【问题描述】:

我知道这个问题之前已经被问过一百次了,但我尝试过的似乎都没有用。

我只是希望能够将文本文件加载到 JAR 中。我尝试过的大多数方法在 Eclipse 中都可以正常工作,但一旦导出就不行。这是我在下面尝试过的一些代码:

public String[] loadTranslations(String trans){

    String name = "/translations/"+trans+".txt";

    ArrayList<String> lines = new ArrayList<String>();
      URL url = this.getClass().getResource(name);
        System.out.println("URL: " + url);
        File f = new File(url.getFile());

        try {
            FileReader reader = new FileReader(f);        
            try {
                BufferedReader bufferedReader = new BufferedReader(reader);
                 String line = null;
                 while ((line = bufferedReader.readLine()) != null) {
                     lines.add(line);

                 }
                 bufferedReader.close();
                 return lines.toArray(new String[lines.size()]);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException notFoundEx) {
            System.out.println("Caught FileNotFoundException: " + notFoundEx.getMessage());
        }

        return lines.toArray(new String[0]);
}

还有……

public String[] loadTranslations3(String trans){
    String name = "translations/"+trans+".txt";
    ArrayList<String> lines = new ArrayList<String>();

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(name)));
        String line;
        while ((line = reader.readLine()) != null) {
        lines.add(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return lines.toArray(new String[0]);

    }

该函数应该由诸如

之类的命令运行
String[] translations = loadTranslations("EN");

我尝试过使用/不使用斜线等。

我的翻译文件夹在 src 目录中,它包含在构建路径中:

异常是 NullPOinter:

这是我尝试运行第二个代码示例时的转储:

java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at com.animation.shop.Main.loadTranslations(Main.java:215)
at com.animation.shop.Main.initTranslations(Main.java:287)
at com.animation.shop.Main.initVars(Main.java:197)
at com.animation.shop.Main.<init>(Main.java:1142)
at com.animation.shop.Main$1.run(Main.java:361)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatc...

第 215 行:

  BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(name)));

【问题讨论】:

  • 在导出 jar 时,是否将翻译文件夹作为导出的一部分包含在内?
  • 当你说“不工作”时——你是什么意思?
  • @Java 抱歉,这是一个空指针异常。我已经包含了来自 ubuntu 终端的屏幕截图。
  • @Aritra:该文件夹在 JAR 中可见(我认为通过将其包含在 Eclipse 的构建中可以处理该部分)
  • 你也能显示你的jar文件的结构吗?

标签: java eclipse jar resources


【解决方案1】:

仍然不太确定问题出在哪里,可能是我忽略了一些问题,但我通过使用 processing.core.PApplet loadStrings() 函数让它工作了: 代码:(basicPapplet 扩展 processing.core.PApplet)

    public String[] loadTranslations(String trans){

    String name = "data/translations/"+trans+".txt";

     basicPapplet bp = new basicPapplet();

返回 bp.loadStrings(name);

}

【讨论】:

  • @Aritra 我认为此时需要任何答案。当您在网上看到的答案不起作用时,您不能挑剔。
【解决方案2】:

您的第二种方法效果很好。以下是我的工作方式:

public class Test {

    public static void main(String[] args) {
        Test test = new Test();
        String[] strings = test.loadTranslations3("test");
        for(String someString : strings) {
            System.out.println(someString);
        }
    }

    public String[] loadTranslations3(String trans) {
        String name = "translations/" + trans + ".txt";
        ArrayList<String> lines = new ArrayList<String>();

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    getClass().getClassLoader().getResourceAsStream(name)));
            String line;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines.toArray(new String[0]);
    }
}

我在eclipse中的文件夹结构是:

src/somepackage/Test.java
src/translations/test.txt

当您从 Eclipse 导出它时,导出为 Runnable JAR 文件,并指向 Test.java 类。

另外,请确保在您的项目属性中,src 文件夹具有:

Included: (All)
Excluded:(None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多