JAVA程序读txt文件里最后1000行怎么实现
publicvoidexecute()throwsIOException{Stringtemp="";try{//XmlParserparser=newXmlParser...
public void execute() throws IOException{
String temp = "";
try{
//XmlParser parser = new XmlParser();
File file = new File("C:\\SSMP1.0\\Deployment\\logs\\my.log");//创建文件对象
BufferedReader br = new BufferedReader(new FileReader(file)); //创建读取流
//读取数据
//temp = br.readLine();
String line;
String strSql;
String result;
List list=new ArrayList();
while((line=br.readLine())!=null)
{
list.add(line);
}
int start=0;
if(list.size()>1000)
{
start=list.size()-1000;
}
for(int i=start;i<list.size();i++)
{
temp+=list.get(i)+"<br />";
}
// while((line = br.readLine()) != null){
// temp += "^" + line+"\n";
//
// // System.out.print(temp);
//
// }
}catch(Exception e){
//System.out.println("---------------------------------------");
// e.printStackTrace();
//System.out.println("---------------------------------------");
}
OperateResult result=new OperateResult();
result.setSuccess(true);
result.setError(temp);
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
out.write(temp);
out.flush();
out.close();
//return null;
}
}
我现在实现的是 把文件全读出来,然后倒这读1000行,可是当文件特别大的时候速度会很慢,,怎样让他实现读最后1000行?求解 急 谢谢
是读日志文件 展开
String temp = "";
try{
//XmlParser parser = new XmlParser();
File file = new File("C:\\SSMP1.0\\Deployment\\logs\\my.log");//创建文件对象
BufferedReader br = new BufferedReader(new FileReader(file)); //创建读取流
//读取数据
//temp = br.readLine();
String line;
String strSql;
String result;
List list=new ArrayList();
while((line=br.readLine())!=null)
{
list.add(line);
}
int start=0;
if(list.size()>1000)
{
start=list.size()-1000;
}
for(int i=start;i<list.size();i++)
{
temp+=list.get(i)+"<br />";
}
// while((line = br.readLine()) != null){
// temp += "^" + line+"\n";
//
// // System.out.print(temp);
//
// }
}catch(Exception e){
//System.out.println("---------------------------------------");
// e.printStackTrace();
//System.out.println("---------------------------------------");
}
OperateResult result=new OperateResult();
result.setSuccess(true);
result.setError(temp);
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
out.write(temp);
out.flush();
out.close();
//return null;
}
}
我现在实现的是 把文件全读出来,然后倒这读1000行,可是当文件特别大的时候速度会很慢,,怎样让他实现读最后1000行?求解 急 谢谢
是读日志文件 展开
3个回答
展开全部
先把指针移动到最后一行,然后倒着读一千行
public void seek(long pos)
throws IOException设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
参数:
pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
抛出:
IOException - 如果 pos 小于 0 或者发生 I/O 错误。
--------------------------------------------------------------------------------
public long length()
throws IOException返回此文件的长度。
返回:
按字节测量的此文件的长度。
抛出:
IOException - 如果发生 I/O 错误。
public void seek(long pos)
throws IOException设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
参数:
pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
抛出:
IOException - 如果 pos 小于 0 或者发生 I/O 错误。
--------------------------------------------------------------------------------
public long length()
throws IOException返回此文件的长度。
返回:
按字节测量的此文件的长度。
抛出:
IOException - 如果发生 I/O 错误。
追问
我这个txt是日志文件,
追答
日志文件怎么了?读取方法和读取txt一样嘛
展开全部
如果不是必须仅通过程序来达到这个要求的话,我可以提供一种解决方案:你可以将数据每1000行分割成一个文件(加入新数据可以直接追加在最后文件的末尾,已满的情况下开新文件),读取的时候用程序每次读最后两个文件,取最后的1000行,这样最坏情况下用时也只是直接取最后1000行时间的2倍,并且期望是1.5倍. 希望更快的话还可以将文件分成500行,这样需要取后3个文件的末1000行,最坏时间是1.5倍, 期望时间是1.25倍, 当然以此类推, 你可以通过将文件分得更细来获得更快的速度(当然分得过细也不可取,会导致硬盘寻址的次数增加)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
RandomAccessFile raf = new RandomAccessFile("C:\\SSMP1.0\\Deployment\\logs\\my.log", "rw");
raf.seek(raf.length()-1000);
String line=null;
while((line=raf.readLine())!=null){
System.out.println(line);
}
raf.close();
给你这个,你应该可以用,我1——2G的文件也读
raf.seek(raf.length()-1000);
String line=null;
while((line=raf.readLine())!=null){
System.out.println(line);
}
raf.close();
给你这个,你应该可以用,我1——2G的文件也读
更多追问追答
追问
您好,您这个改成我上面那个怎么改下呢?用我上面发那代码怎么改下呢?
追答
public void execute() throws IOException{
String temp = "";
try{
//XmlParser parser = new XmlParser();
RandomAccessFile raf = new RandomAccessFile("C:\\SSMP1.0\\Deployment\\logs\\my.log", "rw");
raf.seek(raf.length()-1000);//主要就是这里,将指针定义到最后1000行处,其他的和你的流一样
String line=null;
while((line=raf.readLine())!=null){
temp+=line+"\n";
}
raf.close();
}catch(Exception e){
//System.out.println("---------------------------------------");
// e.printStackTrace();
//System.out.println("---------------------------------------");
}
OperateResult result=new OperateResult();
result.setSuccess(true);
result.setError(temp);
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
//return null;
}
}
建议你下,你可以试试我那段代码应该没错,我这里只是告诉你怎么做
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |