请使用 RandomAccessFile读取最后100行数据 UTF-8
时间: 2024-05-04 18:21:38 浏览: 134
RandomAccessFile的用法
好的,以下是Java代码实现:
```java
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ReadLast100Lines {
public static void main(String[] args) throws IOException {
File file = new File("test.txt");
int linesToRead = 100;
List<String> lines = readLastLines(file, linesToRead);
Collections.reverse(lines);
for (String line : lines) {
System.out.println(line);
}
}
private static List<String> readLastLines(File file, int linesToRead) throws IOException {
try (RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r")) {
List<String> lines = new ArrayList<>();
long fileLength = file.length();
long filePointer = fileLength - 1;
int lineCount = 0;
while (filePointer >= 0 && lineCount < linesToRead) {
randomAccessFile.seek(filePointer);
byte currentByte = randomAccessFile.readByte();
if (currentByte == '\n') {
String line = randomAccessFile.readLine();
if (line != null) {
lines.add(new String(line.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
lineCount++;
}
}
filePointer--;
}
return lines;
}
}
}
```
其中,`test.txt` 是待读取的文件名,`linesToRead` 是需要读取的行数。程序会先将文件指针移动到文件末尾,然后从文件末尾开始往前读取每一行,直到读取到指定的行数或者读到文件开头。最后将读取到的每一行存储在一个列表中,利用 `Collections.reverse` 方法将列表中元素的顺序翻转,这样就可以按照从文件末尾开始读取的顺序输出最后的100行数据了。
阅读全文