我有一个菜鸟问题。
我正在编写一个程序,使用File and Scanner类从文本文件中获取大量数据,如下所示:
File data = new File("champdata.txt");
Scanner read = new Scanner(data);
read.useDelimiter("%");
然后,扫描程序在IDE中正确检索文本文件中的数据,但是当我将程序作为.jar文件运行时,无法检索该文件。
我已经阅读了一些关于将文本文件添加到.jar文件本身,并使用InputStream和BufferedReader类来读取文件的内容,但我从未使用过这些类,也不了解它们的不同之处/如何使用它们代替File和Scanner类。
任何人都可以帮助我吗?
答案 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()