文件名,目录名称或卷标语法不正确 – Kotlin – Maven

当我启动打包的jar时出现这个错误。 当我从我的IDE运行它不会给出错误并运行。

java.io.FileNotFoundException: file:\C:\Development\Kotlin\AccountTool\target\AccountTool-1.0-SNAPSHOT-jar-with-dependencies.jar!\accounts.json (The filename, directory name or volume label syntax is incorrect) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileReader.<init>(Unknown Source) at com.martacus.accounttool.ToolView$handler.readData(Tool.kt:41) at com.martacus.accounttool.ToolView.<init>(Tool.kt:56) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at tornadofx.FXKt.find(FX.kt:238) at tornadofx.App.start(App.kt:27) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(Unknown Source) at com.sun.javafx.application.LauncherImpl$$Lambda$52/31866147.run(Unknown Source) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(Unknown Source) at com.sun.javafx.application.PlatformImpl$$Lambda$45/2900468.run(Unknown Source) at com.sun.javafx.application.PlatformImpl.lambda$null$170(Unknown Source) at com.sun.javafx.application.PlatformImpl$$Lambda$48/4210449.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(Unknown Source) at com.sun.javafx.application.PlatformImpl$$Lambda$47/24077489.run(Unknown Source) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source) at com.sun.glass.ui.win.WinApplication$$Lambda$36/1828305.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 

IDE中的代码和文件层次结构: 在这里输入图像描述

 fun readData(){ accounts.clear() var readFile = ToolView::class.java.classLoader.getResource("accounts.json").file println(readFile) FileReader(readFile).use{ var account = gson.fromJson(it, Array<Account>::class.java) ?: return for(i in account){ accounts.add(i) } } } 

.jar root:

在这里输入图像描述

我不知道什么是错的,为什么它给了我错误。 在stackoverflow上搜索和谷歌did not给我提供正确的答案。 我希望这里有人可以帮助我,如果你需要更多的信息,请这样说。

谢谢!

当资源被压缩到一个jar文件中时,它就不再作为文件系统中的一个文件。 因此,不能使用标准API来处理文件系统,如File()FileReader()来访问资源的内容。

相反,您应该使用Class.getResourceAsStreamClassLoader.getResourceAsStream方法打开资源流,并从该流中读取内容:

 val stream = ToolView::class.java.classLoader.getResourceAsStream("accounts.json") stream.reader().use { println(it.readText()) } 
Interesting Posts