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
相关产品推荐
相关产品推荐

