4

我有一个菜鸟问题。

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

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

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

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

谁能帮我吗?

4

2 回答 2

3

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

更新

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

不,如果它在ResourceJar 中的路径中,则字符串需要是:

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

如果它在resources路径中:

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

字符串必须是精确的字母,(多个&)大小写。

于 2012-10-18T18:15:49.177 回答
2

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

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

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

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

Now if you want to have the same functionality while developing in your IDE, place the file in your source directory, so that when the project is being built, it is placed in your classes folder. This way, the file can be loaded as described above using getResourceAsStream()

于 2012-10-18T18:42:49.010 回答