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月前
|
Linux C语言 Windows
C语言文件编程-Linux环境下运行
本文介绍了在Linux环境下使用C语言进行文件编程时的两种主要接口:C标准库函数与Linux系统调用。C标准库提供了`fopen`, `fread`, `fwrite`, 和 `fclose`等函数,适用于普通文件操作;而Linux系统调用如`open`, `read`, `write`, 和 `close`则更适合处理设备文件,同时也可用于普通文件。这两种方法的主要区别在于前者使用文件指针,后者使用文件描述符。文章还给出了两个示例程序:一个使用C标准库函数实现文件复制,另一个则使用Linux系统调用完成相同任务。
|
编译器 C语言 C++
C语言基础教程(宏的使用和多文件编程)
C语言基础教程(宏的使用和多文件编程)
270 0
|
8月前
|
存储 缓存 C语言
C语言易错小贴士
C语言易错小贴士
|
9月前
|
C语言
C语言函数及分文件编程
C语言函数及分文件编程
88 0
|
存储 编译器 C语言
【C++知识点】多文件编程
【C++知识点】多文件编程
268 0
|
编译器 程序员 C语言
C语言编程—头文件
头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。
|
C语言 C++
C++万能头文件
C++万能头文件
738 0
|
机器学习/深度学习 Python
小习惯随手记:Python编程时将常引用的基础工具包放在一个头文件中
小习惯随手记:Python编程时将常引用的基础工具包放在一个头文件中
|
Linux C语言 Windows
C语言-文件编程
C语言-文件编程
183 0

热门文章

最新文章