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

Java 从.jar文件读取文本文件,java,inputstream,embedded-resource,java.util.scanner,bufferedreader,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文件本身添加文本文件以及使用InputStre

我有一个新手问题

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

   File data = new File("champdata.txt");
   Scanner read = new Scanner(data);
   read.useDelimiter("%");
然后,扫描仪在IDE中正确地从文本文件中检索数据,但当我以.jar文件运行程序时,无法检索该文件

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


有人能帮我吗?

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

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

否。如果它位于Jar中的
资源
路径中,则字符串需要为:

..getResource("/Resource/champdata.txt");
如果它位于
资源
路径中:

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

字符串必须是精确的字母(复数&)大小写。

扫描器
类有一个构造函数;所以您仍然可以像以前一样使用这个类来读取数据

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

InputStream is = getClass().getResourceAsStream("champdata.txt");
Scanner read = new Scanner(is);
read.useDelimiter("%");
如果名为
champdata.txt
的文件位于jar文件的根目录下(这只是一个zip文件,您可以使用任何解压来验证文件的位置)


现在,如果希望在IDE中开发时具有相同的功能,请将该文件放在源目录中,以便在生成项目时将其放在
classes
文件夹中。通过这种方式,可以如上所述使用
getResourceAsStream()

加载文件。您是否将同一个文件放在jar中?但是如果我将程序分发到另一台计算机,URL是否会指向我计算机上的某个目录而无法工作?如果您按照链接页面中的说明形成URL,则不会。为什么不试试呢?如果我把文本文件放在src文件夹的“Resource”文件夹中,我会使用的URL是“resources/champdata.txt”?或者我在这里遗漏了什么……不正确的案例和多元化只是我在评论框中的一个错误,但我认为这可能已经回答了我的问题。这很好,非常感谢你的帮助。您还可以简单地向我解释InputStream类的作用吗?输入流是您可以从中读取数据的东西,它是一种抽象,可以将数据封装在任何文件或url(网页、通过url可访问的任何资源)后面。InputStream是基类,JDK提供了它的多个子类,比如专门用于文件的FileInputStream、用于音频的AudioInputStream、用于从
字节[]
读取的ByteArrayInputStream等等。请看下面的文档: