当前位置: 首页 > 面试题库 >

java如何从jar中读取资源文件?

袁凌
2023-03-14
问题内容

我想像这样从我的jar中读取资源:

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferredReader 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,并且包含我的文件的文件夹位于类文件夹中。


问题答案:

而不是尝试将资源作为文件寻址,只需让ClassLoaderhtml" target="_blank">返回资源的InputStream,而不是通过getResourceAsStream

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

只要该file.txt资源在类路径上可用,那么此方法将以相同的方式工作,而不管该file.txt资源是位于classes/目录中还是位于之中jar。

URI is not hierarchical发生这种情况是因为jar文件中资源的URI看起来像这样:file:/example.jar!/file.txt。你无法读取jar(zip文件)中的条目,就像原来的File一样。



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

  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

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

  • 问题内容: 我通过Java程序读取的路径中有hibernate.cfg.xml和test.txt。现在,当我使用maven创建jar时,这些文件不存在。所以我读到我应该放在资源文件夹中,所以现在我的目录结构是 scr->主要-> Java 现在我可以看到jar中的文件,但是它们根本不在资源文件夹中 myjar.jar-> com(源代码) 我尝试使用访问 getClass()。getResourc

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

  • 问题内容: 我在项目的根目录中有一个资源文件夹/程序包,我“不想”加载某个文件。如果我想加载某个文件,我将使用class.getResourceAsStream,我会很好的!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环访问该文件夹中的文件,并获取每个文件的流,并读取内容…假设在运行时之前未确定文件名… 我该怎么办?有没有一种方法可以获取jar文件中“文件夹”中文件的列表?请注意,带有资