java RandomAccessFile用ByteBuffer读写文件
时间: 2023-08-10 20:57:15 浏览: 208
你可以使用`RandomAccessFile`和`ByteBuffer`来实现文件的读写操作。下面是一个示例代码:
```java
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class FileReadWriteExample {
public static void main(String[] args) {
try {
// 打开一个 RandomAccessFile 对象,以读写模式打开文件
RandomAccessFile file = new RandomAccessFile("example.txt", "rw");
FileChannel channel = file.getChannel();
// 创建一个 ByteBuffer,设置容量为 1024 字节
ByteBuffer buffer = ByteBuffer.allocate(1024);
// 从文件中读取数据到 ByteBuffer
int bytesRead = channel.read(buffer);
while (bytesRead != -1) {
buffer.flip(); // 切换为读模式
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get()); // 读取字节并输出
}
buffer.clear(); // 清空 ByteBuffer
bytesRead = channel.read(buffer); // 继续从文件中读取数据
}
// 向文件中写入数据
String data = "Hello, World!";
buffer.clear();
buffer.put(data.getBytes());
buffer.flip(); // 切换为写模式
channel.write(buffer);
// 关闭文件流
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在上面的示例中,首先创建了一个`RandomAccessFile`对象,并通过`getChannel()`方法获取了`FileChannel`对象。然后,创建了一个`ByteBuffer`对象,并设置了容量为1024字节。接下来,使用`channel.read(buffer)`方法从文件中读取数据到`ByteBuffer`,并通过`buffer.flip()`方法切换为读模式。然后,使用`buffer.get()`方法逐个读取字节并输出。当`buffer`中没有剩余字节时,使用`buffer.clear()`方法清空`ByteBuffer`。重复执行以上步骤,直到读取到文件末尾。最后,使用`buffer.put(data.getBytes())`方法将数据写入`ByteBuffer`,并通过`buffer.flip()`方法切换为写模式。最后,使用`channel.write(buffer)`方法将数据写入文件中。最后,记得关闭文件流。
阅读全文