Java中如何在不删除现有内容的情况下覆盖文件指定内容?
问题解答
你的需求是可行的,但当前代码的写法做不到——因为FileWriter的默认构造(FileWriter("test.txt"))会直接截断文件,第二次打开时会把之前写的"123456789"清空,再写入"hello",所以最后文件只剩"hello"。
要实现「覆盖文件开头部分内容、保留后面原有内容」的效果,你得用支持随机定位写入的类,比如RandomAccessFile,这是最直接的方式:
示例代码
// 第一次写入初始内容 try (RandomAccessFile raf = new RandomAccessFile("test.txt", "rw")) { raf.write("123456789".getBytes()); } // 第二次覆盖开头内容,保留后续部分 try (RandomAccessFile raf = new RandomAccessFile("test.txt", "rw")) { // 将文件指针移到文件开头 raf.seek(0); // 写入"hello",覆盖前5个字节 raf.write("hello".getBytes()); }
运行这段代码后,test.txt的内容就是你要的"hello6789"——"hello"替换了原来前5个字符,剩下的"6789"会保留下来。
注意事项
如果涉及中文、特殊字符这类非ASCII内容,要统一使用指定编码(比如UTF-8)写入,避免字节长度不匹配导致乱码,示例如下:
raf.write("hello".getBytes(StandardCharsets.UTF_8));
内容的提问来源于stack exchange,提问作者Priyshrm
相关产品推荐
相关产品推荐

