从.jar文件中读取文本文件

时间:2012-10-18 18:14:01

标签: java inputstream embedded-resource java.util.scanner bufferedreader

我有一个菜鸟问题。

我正在编写一个程序,使用File and Scanner类从文本文件中获取大量数据,如下所示:

   File data = new File("champdata.txt");
   Scanner read = new Scanner(data);
   read.useDelimiter("%");

然后,扫描程序在IDE中正确检索文本文件中的数据,但是当我将程序作为.jar文件运行时,无法检索该文件。

我已经阅读了一些关于将文本文件添加到.jar文件本身,并使用InputStream和BufferedReader类来读取文件的内容,但我从未使用过这些类,也不了解它们的不同之处/如何使用它们代替File和Scanner类。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

有必要通过URL检索文件,因为它是嵌入式资源。有关详细信息,请参阅embedded resource Wiki

更新

  

因此,如果我将文本文件放在src文件夹中的“Resource”文件夹中,我使用的URL是“resources / champdata.txt”

没有。如果它位于Jar中的Resource路径中,则字符串必须为:

..getResource("/Resource/champdata.txt");

如果它在resources路径中:

..getResource("/resources/champdata.txt");

字符串必须是确切的字母,(多个&)情况。

答案 1 :(得分:2)

Scanner类有一个构造函数Scanner(InputStream);所以你仍然可以像以前一样使用这个类来读取数据。

您所要做的就是从Jar中读取文件,您可以这样做:

InputStream is = getClass().getResourceAsStream("champdata.txt");
Scanner read = new Scanner(is);
read.useDelimiter("%");

如果名为champdata.txt的文件位于jar文件的根目录(这只是一个zip文件,则可以使用任何解压缩程序来验证文件的位置)。

现在,如果您希望在IDE中进行开发时具有相同的功能,请将文件放在源目录中,以便在构建项目时将其放在classes文件夹中。这样,可以使用getResourceAsStream()

按上述方法加载文件