代码
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有自己的类加载器,当您调用getResource
或getResourceAsStream
时,从workspace/test/target/classes/login_commands.json
获取文件,这是创建文件的有效路径。