当前位置: 首页 > 知识库问答 >
问题:

从jar中读取资源文件

徐学潞
2023-03-14

我想从我的jar中读取一个资源,如下所示:

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferedReader reader = new BufferedReader(new FileReader(file));

//Read the file

在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException:

Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical

我真的不知道为什么,但通过一些测试我发现如果我改变

file = new File(getClass().getResource("/file.txt").toURI());

file = new File(getClass().getResource("/folder/file.txt").toURI());

然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。

我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

共有1个答案

慕晨
2023-03-14

不要尝试将资源作为文件来处理,只需通过getResourceStream请求类加载器返回资源的InputStream:

InputStream in = getClass().getResourceAsStream("/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

只要类路径上的file.txt资源可用,那么无论file.txt资源是在类/目录中还是在jar目录中,此方法都将以相同的方式工作。

URI不是分层的之所以会出现,是因为jar文件中资源的URI看起来像这样:file:/example.jar!/file.txt。您不能读取jar(一个zip文件)中的条目,就像它是一个普通的旧文件一样。

下面的答案很好地解释了这一点:

  • 如何从Java jar文件中读取资源文件?
  • Java Jar文件:使用资源错误:URI不是分层的
 类似资料:
  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo

  • 问题内容: 我想像这样从我的jar中读取资源: //Read the file 并且在Eclipse中运行它时效果很好,但是如果我将其导出到jar中运行,则会出现: 我真的不知道为什么,但是经过一些测试,我发现我是否改变了 至 然后它的作用相反(它在jar中起作用,但在Eclipse中不起作用)。 我正在使用Eclipse,并且包含我的文件的文件夹位于类文件夹中。 问题答案: 而不是尝试将资源作为

  • 我有以下前缀: 有办法 在intellij中,idea工作正常,但启动jar时出现错误: JAVA尼奥。文件NoSuchFileException:文件:/app。罐子/BOOT-INF/classes/模板/请求订单/未标记/请求订单未标记。pdf

  • 问题内容: 我在abc.jar的类路径中有一个文件X.json。abc.jar中有一个readFile方法,该文件读取为 如果我从jar的上下文中运行它,即在abc.jar内的某个文件中的main方法中运行它,它将很好地读取 但是,当从abc.jar外部从其他代码中调用readFile时,它将失败 如何通过从jar的上下文外部调用readFile方法获取File对象? 问题答案: 到部署时,这些资

  • 问题内容: 我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件。我可以获取所需文件的URL,但是当我将其传递给FileReader(作为字符串)时,我得到了FileNotFoundException,上面写着“文件名,目录名或卷标语法不正确”。 作为参考,我毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数。这似乎表明我用来获取URL的方法是

  • 问题内容: 我有一个XML文件,需要在Android SDK中进行解析。 如何从资源中读取XML文件路径? XML包含: 问题答案: 将其放在文件夹下。然后,您可以使用以下命令打开它: 这里有一个有关如何使用的示例: http://android-er.blogspot.com/2010/04/read-xml-resources-in-android- using.html