运行 jar 文件时出现 NoSuchFileException

NoSuchFileException when running jar file

当我 运行 访问 src 目录中其他文件的 jar 文件时,我得到以下 RuntimeException:

Exception in thread "main" java.nio.file.NoSuchFileException: src\FileToBeAccessed.txt.lck at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsFileSystemProvider.newFileChannel(Unknown Source) at java.nio.channels.FileChannel.open(Unknown Source) at java.nio.channels.FileChannel.open(Unknown Source) at java.util.logging.FileHandler.openFiles(Unknown Source) at java.util.logging.FileHandler.(Unknown Source) at Program.main(Program.java:30)

当我直接 运行 它而不构建 jar 文件时,代码工作正常。

您需要将访问 jar 中的资源的方式更改为流。

this.getClass().getResourceAsStream("/file.txt");

正确的做法是

this.getClass().getResourceAsStream("file.txt");

真是奇怪

this.getClass().getResource("file.txt")

在 IDE 中有效,但当您 运行 从罐子中取出时无效。

this.getClass().getResourceAsStream("file.txt") 

在 IDE 和 jar 中都有效。