Java中基于file.length()的文件追加功能失效,寻求技术指导
问题分析与修复方案
嘿,我一眼就瞅出问题所在了——你用的FileWriter默认是覆盖模式,这就是append功能失效的核心原因!
为什么原代码的append不工作?
当你调用new FileWriter(file)时,不管目标文件原本有没有内容,这个构造方法都会先把文件内容清空,然后再开始写入。所以哪怕你通过file.length()判断出文件不为空,准备执行append操作,此时原文件的内容已经被清空了,最终看起来append完全没生效。
如何修复?
你需要使用FileWriter的另一个重载构造方法,开启追加模式:
new FileWriter(file, true)
第二个参数传入true,就会告诉FileWriter:如果文件已存在,就直接在末尾追加内容,而不是覆盖原有内容。
另外还有个小细节要注意:你用(int)file.length()来判断是否为空,当文件大小超过int的最大值(2GB)时会出现溢出错误,直接用file.length() != 0更安全,因为file.length()返回的是long类型。
修正后的完整代码
import java.io.File; import java.io.FileWriter; import java.io.IOException; public class Filecreate { public static void main(String args[]) throws IOException { File file = new File("newFileCreated.txt"); System.out.println("file path "+file.getAbsolutePath() +" file length - "+file.length()); // 开启追加模式 FileWriter myWriter = new FileWriter(file, true); if(file.length() != 0){ myWriter.append("appended text\n"); }else{ myWriter.write("Files in Java might be tricky, but it is fun enough!"); } myWriter.close(); System.out.println("file length after writing to file "+file.length()); } }
测试验证
- 第一次运行:文件为空,会执行
write方法写入初始内容; - 第二次及之后运行:文件已有内容,会执行
append方法在末尾追加新文本。
内容的提问来源于stack exchange,提问作者learningIsFun
相关产品推荐
相关产品推荐

