编写一个带缓存的对文本文件进行读写操作的java程序。 (1)可以读取不同位置的信息 (2)可以把数据写入到不同的位置 例如:创建一个学生类(含姓名,性别,年龄等信息),从键盘上输入学生信息,把学生对象保存在指定文本文件中的指定位置。从文本文件中读取特定学生信息。实现学生信息的增加、删除、修改、插入等操作。
时间: 2024-03-18 09:41:48 浏览: 85
带缓存的读写器-java语言程序设计(安徽大学)
好的,以下是一个基本的带缓存的对文本文件进行读写操作的Java程序:
```java
import java.io.*;
public class FileReadWrite {
private static final int BLOCK_SIZE = 1024; // 缓存块大小
// 读取文件指定位置的数据
public static String readFromFile(String fileName, long position, int size) throws IOException {
File file = new File(fileName);
if (!file.exists() || !file.isFile()) {
throw new IOException(fileName + "不是一个有效的文件");
}
try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
// 移动文件指针到指定位置
raf.seek(position);
byte[] buffer = new byte[BLOCK_SIZE];
int bytesRead = 0;
StringBuilder sb = new StringBuilder();
while (size > 0 && (bytesRead = raf.read(buffer, 0, Math.min(size, BLOCK_SIZE))) != -1) {
sb.append(new String(buffer, 0, bytesRead));
size -= bytesRead;
}
return sb.toString();
}
}
// 把数据写入到文件指定位置
public static void writeToFile(String fileName, long position, String data) throws IOException {
File file = new File(fileName);
if (!file.exists() || !file.isFile()) {
throw new IOException(fileName + "不是一个有效的文件");
}
try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
// 移动文件指针到指定位置
raf.seek(position);
byte[] buffer = data.getBytes();
raf.write(buffer, 0, buffer.length);
}
}
// 实现学生信息的增加、删除、修改、插入等操作
public static void main(String[] args) throws IOException {
String fileName = "students.txt";
// 插入学生信息
Student s1 = new Student("张三", "男", 18);
String data1 = s1.toString() + System.lineSeparator(); // 每个学生信息占一行
writeToFile(fileName, 0, data1);
// 读取学生信息
String data2 = readFromFile(fileName, 0, data1.length());
System.out.println(data2);
// 修改学生信息
Student s3 = new Student("李四", "女", 20);
String data3 = s3.toString() + System.lineSeparator();
writeToFile(fileName, 0, data3);
// 删除学生信息
writeToFile(fileName, 0, "");
}
}
class Student {
private String name;
private String gender;
private int age;
public Student(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return name + "," + gender + "," + age;
}
}
```
在这个程序中,我们使用了RandomAccessFile类来实现对文件的读写操作。它可以随机访问文件的任意位置,并且支持读写操作。我们可以通过seek()方法移动文件指针到指定位置,再通过read()和write()方法读写文件。
在实现学生信息的增加、删除、修改、插入等操作时,我们可以先把学生信息转换成字符串形式,再通过writeToFile()方法写入文件。读取学生信息时,我们可以通过readFromFile()方法读取指定位置的数据,并将其转换成学生对象。
阅读全文