谷歌io文件的GetResource导致来自jar根的文件出现FileNotFoundException



代码

Files.toString(new File(Thread.currentThread().getContextClassLoader().getResource(
    "login_commands.json").getFile()), Charsets.UTF_8)

异常

java.io.FileNotFoundException: file:C:applicationtarget.jar!login_commands.json (The filename, directory name, or volume label syntax is incorrect)

罐子结构

--根

  • login_commands.json
  • 等等

代码在IDE中运行良好。

如何读取此文件?

解决方案

使用

Thread.currentThread().getContextClassLoader().getResourceAsStream("login_commands.json")

的输入

Thread.currentThread().getContextClassLoader().getResource("login_commands.json").getFile()

为什么

当您使用getResource()时,类加载器尝试从<JAR_FOLDER>/YOUR_JAR.jar!login_commands.json获取您的文件,而此路径对于创建java.io.File无效,并抛出FileNotFoundException

请注意,您的代码可以在IDE中工作,因为您的IDE有自己的类加载器,当您调用getResourcegetResourceAsStream时,从workspace/test/target/classes/login_commands.json获取文件,这是创建文件的有效路径。

最新更新