java nio 中 filechannel 的 write() 方法用于将数据从缓冲区写入文件通道。调用时传入一个继承自 bytebuffer 的实例,该方法会返回实际写入的字节数,并自动更新缓冲区的 position 指针。若需指定写入位置,应使用带 long position 参数的重载版本,此时不会改变缓冲区的 position。

如何向文件追加内容而不覆盖现有数据
要实现追加写入,必须先将 FileChannel 定位到文件末尾。通过调用 channel.size() 获取当前文件大小,再使用 channel.position(size) 将写入指针移至该位置,随后执行 write() 即可实现追加效果。

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class AppendExample {
public static void main(String[] args) throws Exception {
// 以读写模式打开文件,确保可以定位到末尾
try (RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
FileChannel channel = raf.getChannel()) {
// 获取当前文件大小并定位到末尾
long size = channel.size();
channel.position(size);
// 准备数据
String data = "\nAppended Line";
ByteBuffer buffer = ByteBuffer.wrap(data.getBytes());
// 执行写入
int bytesWritten = channel.write(buffer);
System.out.println("Wrote: " + bytesWritten + " bytes");
}
}
}
上述代码首先通过 RandomAccessFile 获取 FileChannel,接着利用 size() 和 position() 确保写入点在文件尾部。最后将字符串转为 ByteBuffer 并调用 write()。预期结果是原文件内容保持不变,新内容被附加在末尾,控制台打印出实际写入的字节数。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
如何处理 write() 返回值不足的情况
write() 方法不保证一次性写入缓冲区中的所有数据,可能因系统限制或缓冲区状态只写入部分字节。因此,必须检查返回值,并在循环中继续写入剩余数据,直到缓冲区完全清空或发生异常。

write()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










