我想读取一个非常大的文件的最后n行,而不是使用Java将整个文件读入任何缓冲区/内存区域.
我查看了JDK API和Apache Commons I/O,但无法找到适合此目的的API.
我在想UNIX中的尾部或更少的方式.我不认为他们加载整个文件,然后显示该文件的最后几行.在Java中也应该有类似的方法来做同样的事情.
我有一个java ee应用程序,我使用servlet打印用log4j创建的日志文件.在读取日志文件时,通常会查找最后一个日志行,因此如果以相反的顺序打印日志文件,则servlet会更有用.我的实际代码是:
response.setContentType("text");
PrintWriter out = response.getWriter();
try {
FileReader logReader = new FileReader("logfile.log");
try {
BufferedReader buffer = new BufferedReader(logReader);
for (String line = buffer.readLine(); line != null; line = buffer.readLine()) {
out.println(line);
}
} finally {
logReader.close();
}
} finally {
out.close();
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到的实现涉及使用StringBuffer并在打印之前加载所有文件,是不是有代码轻量级方式寻找到文件的末尾并读取内容直到文件的开头?
我正在创建一个日志,我想读取log.txt文件的最后一行,但是一旦读完最后一行,我就无法让BufferedReader停止.
这是我的代码:
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\testing.txt"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图从头到尾读取.log超过2000行的文件.我不能使用如何在Java中从头到尾读取文件(以相反的顺序)?,文件很大.这是我的代码:
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(dataFile.getAbsolutePath())); // the log file
}catch(FileNotFoundException FNFE){
FNFE.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
并阅读文件:
String line = null;
String lastLine = null;
while((line=br.readLine()) != null){
lastLine = line; //setting lastLine to the last line in the file
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法来获得这条线?