编写一个带缓存的对文本文件进行读写操作的java程序。 (1)可以读取不同位置的信息 (2)可以把数据写入到不同的位置
时间: 2024-02-06 07:10:09 浏览: 74
java实现文件的读写操作
以下是一个简单的带缓存的对文本文件进行读写操作的 Java 程序:
```java
import java.io.*;
public class FileReadWriteWithCache {
private static final int CACHE_SIZE = 1024; // 缓存大小为 1 KB
public static void main(String[] args) {
// 读取文件
String fileName = "example.txt";
int pos = 10; // 从第 10 个字符开始读取
int len = 20; // 读取 20 个字符
String content = readFromFile(fileName, pos, len);
System.out.println("Content read from file: " + content);
// 写入文件
String data = "Hello, world!";
int offset = 30; // 从第 30 个字符开始写入
writeToFile(fileName, data.getBytes(), offset);
System.out.println("Data written to file.");
}
/**
* 从文件中读取指定位置和长度的内容
*/
public static String readFromFile(String fileName, int pos, int len) {
char[] buffer = new char[CACHE_SIZE];
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
reader.skip(pos); // 跳过指定位置之前的字符
int readLen = 0;
while (readLen < len && reader.read(buffer, 0, Math.min(CACHE_SIZE, len - readLen)) != -1) {
sb.append(buffer, 0, Math.min(CACHE_SIZE, len - readLen));
readLen += CACHE_SIZE;
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 向文件中写入数据
*/
public static void writeToFile(String fileName, byte[] data, int offset) {
try (RandomAccessFile raf = new RandomAccessFile(fileName, "rw")) {
raf.seek(offset); // 定位到指定位置
raf.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
该程序包含两个方法:`readFromFile` 和 `writeToFile`,分别用于从文件中读取指定位置和长度的内容,以及向文件中写入数据。
在 `readFromFile` 方法中,我们使用了 `BufferedReader` 类来读取文件,并且在读取之前调用了 `skip` 方法来跳过指定位置之前的字符。然后我们使用一个缓存数组 `buffer` 来存储读取到的字符,并且使用 `StringBuilder` 来拼接最终的字符串。由于 `BufferedReader` 的 `read` 方法可能不会一次性读取到指定长度的字符,所以我们需要在循环中多次调用 `read` 方法直到读取到指定长度的字符为止。
在 `writeToFile` 方法中,我们使用了 `RandomAccessFile` 类来实现随机访问文件,并且在写入之前调用了 `seek` 方法来定位到指定位置。然后我们使用 `write` 方法将数据写入到文件中。
注意:以上代码仅供参考,实际应用中需要根据具体情况进行修改和完善。
阅读全文