Kotlin读取同目录文件抛出FileNotFoundException问题求助
问题解决:java.io.FileNotFoundException 处理
原因分析
直接使用File("token.txt")是基于程序运行时的工作目录查找文件,而非Bot.kt源码所在的目录。IDE默认运行工作目录为项目根目录,和源码文件目录不重合,因此即便文件和Bot.kt同目录,运行时也无法找到。
解决方法
方法1:将文件放到运行工作目录(简单但不推荐用于生产)
把token.txt直接移到项目根目录下,程序运行时就能通过相对路径找到它。
方法2:用类加载器读取资源文件(推荐,支持打包JAR)
该方式适配开发与生产环境,打包成JAR后仍能正常读取:
- 将
token.txt移动到项目的resources目录(比如IDEA中是src/main/resources,无此目录可手动创建)。 - 修改代码如下:
private object Bot { // 从classpath读取资源文件 val token = Bot::class.java.getResource("/token.txt")?.readText()?.trim() ?: throw IllegalStateException("token.txt not found in resources directory") fun setup() { } } fun main(args: Array<String>) { println(Bot.token) }
方法3:指定源码文件的绝对路径(不推荐,兼容性差)
若必须从源码目录读取,可手动指定绝对路径,但该方式在不同环境(如不同机器、打包后)会失效:
private object Bot { // 替换为你的源码文件实际路径 val token = File("src/main/kotlin/你的包路径/token.txt").reader().readLines() fun setup() { } }
内容的提问来源于stack exchange,提问作者paspielka
相关产品推荐
相关产品推荐

