用java编写一个带缓存的对文本文件进行读写操作的程序,要求可以读取不懂位置的信息和把数据写入到不同的位置
时间: 2024-01-22 17:20:03 浏览: 71
以下是一个简单的带缓存的文件读写程序示例,它可以读取和写入文本文件。它可以读写不同位置的数据,使用了缓存机制提高了读写效率。
```java
import java.io.*;
public class BufferedFileIO {
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) throws IOException {
String fileName = "test.txt";
writeToFile(fileName, "Hello, World!", 0);
String result = readFromFile(fileName, 0, 13);
System.out.println(result);
}
public static String readFromFile(String fileName, int offset, int length) throws IOException {
char[] buffer = new char[BUFFER_SIZE];
StringBuilder sb = new StringBuilder();
FileReader reader = new FileReader(fileName);
int count = 0;
while (count < offset) {
count += reader.skip(offset - count);
}
while (length > 0 && reader.read(buffer, 0, Math.min(length, BUFFER_SIZE)) != -1) {
sb.append(buffer, 0, length);
length -= BUFFER_SIZE;
}
reader.close();
return sb.toString();
}
public static void writeToFile(String fileName, String data, int offset) throws IOException {
char[] buffer = new char[BUFFER_SIZE];
String tempFileName = fileName + ".tmp";
FileReader reader = new FileReader(fileName);
FileWriter writer = new FileWriter(tempFileName);
int count = 0;
while (count < offset) {
count += reader.skip(offset - count);
}
writer.write(data);
int length;
while ((length = reader.read(buffer, 0, BUFFER_SIZE)) != -1) {
writer.write(buffer, 0, length);
}
reader.close();
writer.close();
File file = new File(fileName);
file.delete();
new File(tempFileName).renameTo(file);
}
}
```
该程序使用了字符缓冲区,可以提高文件读写效率。`readFromFile`方法可以读取指定位置和长度的数据,`writeToFile`方法可以将数据写入指定位置。同时,为了保证原始文件的安全,写入数据时会先将数据写入临时文件,然后将临时文件重命名为原始文件。
请注意,该程序只是一个简单的示例。在实际应用中,可能需要更加完善的文件读写操作,例如异常处理、线程安全等。
阅读全文