import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class TestReadLastLine {
public static void main(String[] args) {
List
lines = readLastLine(new File("D:\\server.log"), 3);
lines.forEach(x -> System.out.println(x));
public static List readLastLine(File file, int numLastLineToRead) {
List result = new ArrayList<>();
try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, StandardCharsets.UTF_8)) {
String line = "";
while ((line = reader.readLine()) != null && result.size() < numLastLineToRead) {
result.add(line);
} catch (IOException e) {
e.printStackTrace();
return result;
标签:
io
java
读取文件
在Java中,我们可以使用Apache Commons IO ReversedLinesFileReader读取File的最后几行。 pom.xml <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <...
文件倒叙读取行内容识别文件编码多线程
1.文件倒叙读取的方式
文件倒叙读取行内容参考了许多博客,大体是一种采用RandomAccessFile进行读取,考虑到有线程的开源解决方案,先采用ReversedLinesFileReader类来进行操作,再apache的commons-io依赖中。
emm,考虑到编码问题,推荐采用2.7版本来操作,因为看2.4的源码是不支持gbk编码的。
<dependency>
<groupId>commons-io</groupId
当我们在
读取文件
的时候,通常都是从前向后读取,那如果要
读取文件
的
最后
一行内容,要如何操作呢?
顺序遍历读取,直到文件
最后
一行
public static String readLastLineV0(File file) {
String lastLine = "";
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
String currentLine = "";
1、首先在pom文件导入依赖
<!--在
Java
中,我们可以使用 Apache Commons IO 的 ReversedLinesFileReader 类
读取文件
的
最后
几行
。 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
最近线上有一个需求,下载系统日志,但是由于tomcat 日志比较大,超过 几百兆甚至几个G。如果用传统方法,将日志文件读取到内存,显然是有问题的。
下面提供一种 截取日志
最后
N行而不会导致内存溢出的方法。使用commons.io 包的ReversedLinesFileReader对象。
代码如下:
package ygw.study.play;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.input.R.
import
java
.io.FileNotFoundException;
import
java
.io.IOException;
import
java
.io.RandomAccessFile;
public class ReverseRead {
public static void main(String[] args) {
//调用读取方法,定义文件以及读取行数
List list = readLastNLine(new File("D:/1.txt"), 5L);
if (list != null
Java
读取文件
最后
几行
项目里需要读取最新的日志,可是最新的日志都在文件的
最后
几行
,所以有了这个需求。
百度之后先研究了别人的代码,感觉一是逻辑不太好理解,二是代码偏向于测试,没有办法哪来就用。
所以自己写了这个方法,希望可以给看到的同学带来帮助。也算我自己的一点积累吧。
*
读取文件
最后
几行
* @param filename
* @param rows
* @thr...