scala scala.io.Source.fromFile读取文件报错:MalformedInputException: Input length = 1

val file1 = scala.io.Source.fromFile("D:/IDEAWorkSpace/SparkJob/input.txt").mkString
println(file1)
val sss = scala.io.Source.fromFile(new java.io.File("D:/IDEAWorkSpace/SparkJob/input.txt")).getLines
val aa = sss.toList
for(line <-aa ){
println(line)
}

IO Exceptionjava.nio.charset.MalformedInputException: Input length = 1

这个错误的原因是因input.txt文件的编码格式不对 改为UTF8后正常
### Java NIO Charset MalformedInputException 错误分析 当在 Scala 环境下使用 Java 的 `nio` 库处理字符集转换时,如果输入数据不符合指定的字符编码标准,则会抛出 `java.nio.charset.MalformedInputException` 异常。此异常通常发生在尝试解析不完整的字节序列或者非法的多字节字符组合时[^1]。 对于特定情况下的 “Input length = 1”,这表明程序遇到了无法识别的单个字节,而该字节不属于当前设定的字符集中合法的一部分。这种问题可能源于源文件的实际编码与预期不符,或者是由于某些特殊字符被错误地写入到了文件中[^2]。 ### 解决方案建议 为了有效应对上述提到的问题,在读取文件之前应该先确认其真实的编码方式,并采取适当措施来防止因编码差异引发的异常: - **检测并匹配正确的字符编码**:确保所使用的字符编码与实际存储的数据相一致。可以利用第三方库如 Apache Tika 或 ICU4J 来自动探测未知文本文件的编码格式。 - **设置替代策略**:通过配置解码器的行为参数,允许它忽略或替换那些不可映射到目标字符集中的字节序列。例如,在创建 `CharsetDecoder` 实例时调用方法 `.onMalformedInput(CodingErrorAction.REPLACE)` 和/或 `.replaceWith(String replacement)` 可以实现这一点。 ```scala import java.nio.file.Files import java.nio.file.Paths import java.nio.charset.StandardCharsets import java.nio.charset.CodingErrorAction val path = Paths.get("example.txt") // 设置解码器行为 val decoder = StandardCharsets.UTF_8.newDecoder() decoder.onMalformedInput(CodingErrorAction.REPLACE) decoder.replaceWith("?") Files.lines(path, StandardCharsets.ISO_8859_1).forEach { line => println(line.decode(decoder)) } ``` - **清理脏数据**:如果有条件的话,最好能够修正原始数据本身存在的问题,比如移除不必要的控制字符或其他可能导致冲突的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值