在jar文件中包含一个文本文件并读取它

时间:2012-05-04 16:37:17

标签: java jar nullpointerexception embedded-resource

  

可能重复:
  Java resource as file

我是Java的新手,我正在尝试在Jar文件中获取文本文件。

当我执行我的jar时,我必须将我的文本文件放在与jar fil相同的文件夹中。如果文本文件不存在,我会得到NullPointerException,我想避免。

我想要做的是在jar中获取txt文件,所以我不会遇到这个问题。我尝试了一些指南,但它们似乎没有用。我目前的读取功能如下:

public static HashSet<String> readDictionary()
{
    HashSet<String> toRet = new HashSet<>();
     try
     {
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream("Dictionary.txt");
        try (DataInputStream in = new DataInputStream(fstream)) {
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            //Read File Line By Line
            while ((strLine = br.readLine()) != null)   {
            // Read Lines
                toRet.add(strLine);
            }
        }
            return toRet;
     }
     catch (Exception e)
     {//Catch exception if any
            System.err.println("Error: " + e.getMessage());
     } 
     return null;
}

3 个答案:

答案 0 :(得分:7)

不要尝试在Jar文件中找到文件作为“文件”。改为使用资源。

获取对类或类加载器的引用,然后获取类或类加载器调用getResourceAsStream(/* resource address */);

你也应该研究你的搜索技巧,因为这里已经被无数次地询问和回答了。事实上,我们应该关闭这个问题,因为我没有看到它增加了SO上已有的讨论。

答案 1 :(得分:3)

// add a leading slash to indicate 'search from the root of the class-path'
URL urlToDictionary = this.getClass().getResource("/" + "Dictionary.txt");
InputStream stream = urlToDictionary.openStream();

另见this answer

答案 2 :(得分:2)

似乎与此问题完全相同:How do I access a config file inside the jar?

除了NullPointerException的问题之外,我建议不要确保它没有发生,而是做好准备并妥善处理。我甚至会进一步要求你总是检查你的变量的空值,这是一件好事。