3. 文件编程

简介: 3. 文件编程

3.1 FileChannel

⚠️ FileChannel 工作模式

FileChannel 只能工作在阻塞模式下

获取

不能直接打开 FileChannel,必须通过 FileInputStream、FileOutputStream 或者 RandomAccessFile 来获取 FileChannel,它们都有 getChannel 方法

  • 通过 FileInputStream 获取的 channel 只能读
  • 通过 FileOutputStream 获取的 channel 只能写
  • 通过 RandomAccessFile 是否能读写根据构造 RandomAccessFile 时的读写模式决定

读取

会从 channel 读取数据填充 ByteBuffer,返回值表示读到了多少字节,-1 表示到达了文件的末尾 int readBytes = channel.read(buffer);

写入

写入的正确姿势如下, SocketChannel ByteBuffer buffer = ...; buffer.put(...); // 存入数据 buffer.flip();   // 切换读模式

while(buffer.hasRemaining()) { channel.write(buffer); }

在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel

关闭

channel 必须关闭,不过调用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法会间接地调用 channel 的 close 方法

位置

获取当前位置 long pos = channel.position(); 设置当前位置 long newPos = ...; channel.position(newPos);

设置当前位置时,如果设置为文件的末尾

  • 这时读取会返回 -1
  • 这时写入,会追加内容,但要注意如果 position 超过了文件末尾,再写入时在新内容和原末尾之间会有空洞(00)


目录
相关文章
|
7月前
|
编译器 数据库 C语言
C语言文件操作(一文带你吃透文件各种操作)
有很多学校都是不会讲文件操作这块知识的,但是考试还要考。文件操作在平常中也是有所应用的。这篇文章详细讲述对于文件的各种操作,对于考试和平常引用是完全足够啦!
74 0
|
6天前
|
JSON Go 数据格式
第十四章 文件操作
第十四章 文件操作
31 2
|
6天前
|
C语言
C语言函数及分文件编程
C语言函数及分文件编程
26 0
|
8月前
|
存储 编译器 C语言
C语言之文件操作(究极无敌详细!)
C语言之文件操作(究极无敌详细!)
|
9月前
|
BI
【文件操作的重难点详解】(一)
【文件操作的重难点详解】(一)
38 0
|
9月前
|
存储
【文件操作的重难点详解】(二)
【文件操作的重难点详解】(二)
41 0
|
11月前
|
存储 编译器 C语言
【C++知识点】多文件编程
【C++知识点】多文件编程
212 0
|
11月前
|
C语言
抽丝剥茧C语言(高阶)文件操作+练习(中)
抽丝剥茧C语言(高阶)文件操作+练习
|
11月前
|
编译器 数据库 C语言
抽丝剥茧C语言(高阶)文件操作+练习(上)
抽丝剥茧C语言(高阶)文件操作+练习
|
11月前
|
存储 C语言
抽丝剥茧C语言(高阶)文件操作+练习(下)
抽丝剥茧C语言(高阶)文件操作+练习