关于java读取文件时的一点小问题

cjhnbls 2016-11-17 05:32:20
我处理一个test.txt文本文件,内容格式是这样的:
-Start
XXX
-End

-Start
XXX
-End

.................整个文件都是按照这样的格式排下去

我当前要做的是把文件里的每个XXX都取出来并放进一个队列里,我目前是这样处理的:
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line = "";
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
if(sb.toString().endsWith("-End\n")){
//TestQueue是一个LinkedBlockingQueue<String> 队列
Queue.add(sb.toString());
sb.delete(0,sb.length());
}
sb.append(line).append("\n");
}
现在遇到的问题是:文本里有些XXX特别长,最长的可能有几十万行,我每读一行的时候都对进行if(sb.toString().endsWith("-End\n"))判断,导致读文件特别慢,有什么办法可以跳过这种特别大的XXX,在不修改test.txt格式的情况下
...全文
265 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
EarthMercy 2016-11-20
  • 打赏
  • 举报
回复
我一直喜欢用startwith- -Start或-End 就跳过当前行。 反之就写入。 太大的文件没有处理过。
逗泥丸的平方 2016-11-18
  • 打赏
  • 举报
回复
出个馊主意 加计时器. sb.toString().endsWith("-End\n") 这里可以不用tostring的 直接substring比一下 就好了 当然加计时器是开玩笑,你可以估计一个行数,加个flg,超过多少行没找到end就怎样.. 不过你还是要一行一行的去找下一个start呀 你说几十万行是什么概念,文件有多大呀....... 太大的话内存是吃不消,你这样会把一个XXX的内容都压到内存里,这样可能要考虑其他的处理方式了

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧