You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用FileOutputStream复制文件末尾出现额外拉丁字符问题求助

问题产生原因

你代码中的循环逻辑存在错误:
FileInputStream.read() 方法的返回值为-1时代表已经读取到输入文件的末尾,没有更多有效内容。但你使用了do-while循环,会先执行读取、写入操作,再判断返回值是否为-1。这就导致当读取到文件结束标记-1时,已经先把-1作为内容写入到了输出文件中,-1转换为字节后就对应你看到的末尾额外拉丁乱码字符。
另外你代码中写的infile.createNewFile()属于冗余且有风险的逻辑:如果你的输入源文件不存在,这段代码会直接创建一个空的输入文件,掩盖了源文件缺失的错误,你本来应该拿到FileNotFoundException来排查问题的。还有声明但未使用的BufferedReader br也属于冗余代码,可以删除。

对应解决方法
  • 方案1:将do-while循环替换为while循环,先判断读取结果为有效内容再写入,这是最常用的写法:
// 替换原来的do-while代码块
while ((c = fin.read()) != -1) {
    fout.write(c);
}
  • 方案2:如果需要保留do-while写法,在写入前增加有效性判断:
do {
    c = fin.read();
    // 仅当读取到的是有效内容时才写入
    if (c != -1) {
        fout.write(c);
    }
} while (c != -1);
  • 优化建议:删除冗余的infile.createNewFile()、BufferedReader br相关代码,避免不必要的异常风险。

内容的提问来源于stack exchange,提问作者17_4011_BALACHANDAR B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:45:10