Java编写一个带缓存的对文本文件进行读写操作的程序。可以读取不同位置的信息,可以把数据写入到不同的位置。
时间: 2024-02-03 19:12:33 浏览: 65
下面是一个基于Java的带缓存的文本文件读写程序示例:
```java
import java.io.*;
public class FileCache {
private static final int BUFFER_SIZE = 1024; //缓存大小
private RandomAccessFile raf; //随机读写文件对象
private byte[] buffer; //缓存数组
public FileCache(String fileName) throws IOException {
raf = new RandomAccessFile(fileName, "rw"); //以读写方式打开文件
buffer = new byte[BUFFER_SIZE];
}
//读取指定位置的数据
public String read(int position, int length) throws IOException {
raf.seek(position); //设置文件指针位置
int total = 0;
StringBuilder sb = new StringBuilder();
while (total < length) {
int readCount = Math.min(buffer.length, length - total); //计算每次读取的字节数
int n = raf.read(buffer, 0, readCount); //读取数据到缓存数组
if (n == -1) {
break;
}
sb.append(new String(buffer, 0, n)); //将缓存中的数据添加到结果中
total += n;
}
return sb.toString();
}
//向指定位置写入数据
public void write(int position, String data) throws IOException {
raf.seek(position); //设置文件指针位置
int total = 0;
while (total < data.length()) {
int writeCount = Math.min(buffer.length, data.length() - total); //计算每次写入的字节数
byte[] bytes = data.substring(total, total + writeCount).getBytes(); //将要写入的数据转换为字节数组
raf.write(bytes, 0, bytes.length); //将数据写入文件
total += writeCount;
}
}
//关闭文件流
public void close() throws IOException {
raf.close();
}
}
```
使用示例:
```java
try {
FileCache fc = new FileCache("test.txt");
fc.write(0, "Hello, world!"); //向文件开头写入数据
System.out.println(fc.read(0, 6)); //从文件开头读取前6个字符
System.out.println(fc.read(7, 5)); //从第8个字符开始读取5个字符
fc.write(7, "Java"); //从第8个字符开始写入"Java"
System.out.println(fc.read(0, 12)); //从文件开头读取前12个字符
fc.close(); //关闭文件流
} catch (IOException e) {
e.printStackTrace();
}
```
阅读全文