Windows环境下Kotlin使用try/catch块无法捕获异常问题
问题根因
你编写的catch块仅配置了捕获NumberFormatException类型异常,而PrintWriter初始化时文件不存在、路径非法或无写入权限抛出的java.io.FileNotFoundException和NumberFormatException无继承关联,因此无法被捕获。
修正方案
方案1:捕获指定IO异常
仅捕获文件不存在的对应异常,需要先导入对应IO包:
import java.io.PrintWriter import java.io.FileNotFoundException try { val writer = PrintWriter("something.txt") } catch (e: FileNotFoundException) { println("捕获到异常:目标文件不存在或无写入权限") }
方案2:捕获全量异常
如果需要覆盖try代码块内所有可能的异常场景,直接捕获父类Exception即可:
import java.io.PrintWriter try { val writer = PrintWriter("something.txt") } catch (e: Exception) { println("捕获到异常:${e.message}") }
补充说明
- Kotlin不存在Java的受检异常限制,你无需在方法上主动声明抛出
FileNotFoundException,直接在catch中指定对应类型即可正常捕获。 - Windows系统下如果文件路径包含空格、特殊字符,或是保存在需要管理员权限的目录(如C盘Program Files文件夹),也会触发
FileNotFoundException,可以在catch块中调用e.printStackTrace()打印完整堆栈定位具体问题。
内容的提问来源于stack exchange,提问作者algor。
相关产品推荐
相关产品推荐

