6

可能重复:
Java 资源作为文件

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

在我执行 jar 的那一刻,我必须将我的文本文件放在与 jar 文件相同的文件夹中。如果文本文件不存在,我会得到一个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;
}
4

3 回答 3

7

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

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


请参阅下面的类似问题(如果可能,请避免创建新问题):

于 2012-05-04T16:38:36.050 回答
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();

另请参阅此答案

于 2012-05-04T16:43:21.617 回答
2

似乎与此问题完全相同:如何访问 jar 中的配置文件?

对于您的问题NullPointerException,我建议不要确保它不会发生,而是要做好准备并妥善处理。我会进一步要求您始终检查变量的空值,这是一件好事。

于 2012-05-04T16:40:42.653 回答