更新时间:2023-03-27 来源:黑马程序员 浏览量:

获取FileChannel不能直接打开,必须通过 FileInputStream、FileOutputStream 或者 RandomAccessFile 来获取 FileChannel,它们都有 getChannel 方法。
通过FileInputStream获取的channel只能读
通过FileOutputStream获取的channel只能写
通过RandomAccessFile是否能读写根据构造RandomAccessFile 时的读写模式决定。
1.读取
会从channel读取数据填充ByteBuffer,返回值表示读到了多少字节,-1 表示到达了文件的末尾。
int readBytes = channel.read(buffer);
2.写入
写入的正确代码如下:
ByteBuffer buffer = ...;
buffer.put(...); // 存入数据
buffer.flip(); // 切换读模式
while(buffer.hasRemaining()) {
channel.write(buffer);
}在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel
3.关闭
channel 必须关闭,不过调用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法会间接地调用 channel 的 close 方法。
4.位置
获取当前位置的示例代码如下:
long pos = channel.position();
设置当前位置
long newPos = ...; channel.position(newPos);
设置当前位置时,如果设置为文件的末尾会读取会返回 -1 。这时写入,会追加内容,但要注意如果 position
超过了文件末尾,再写入时在新内容和原末尾之间会有空洞(00)。
5.大小
使用 size 方法获取文件的大小
6.强制写入
操作系统出于性能的考虑,会将数据缓存,不是立刻写入磁盘。可以调用 force(true) 方法将文件内容和元数据(文件的权限等信息)立刻写入磁盘。
毕业16个工作日,平均薪资13180元,就业率100%,广州黑马AI智能应用开发(Java)学科20250529班
2026-03-06毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03AI智能应用开发课程紧贴企业刚需,全程高效学习,直达中高级软件开发水平
2026-02-28风口正劲!黑马程序员又一AI智能应用开发班毕业当天100%就业!
2026-02-27