2011-08-18 75 views
0

我不知道如何做到以下几点:我想处理一个真正巨大的文本文件(差不多5千兆字节)。由于我无法将文件复制到临时存储器中,因此我想要阅读前500行(或者与内存匹配的内容,我对此还不确定),然后对其进行处理,然后继续下一个500行我完成了整个文件。阅读群文件中的行数

你能发表一个你需要的“循环”或命令的例子吗?因为我尝试过的所有方式都是从头开始的,但我想在完成前面500行后继续。

帮助赞赏。

+0

你想它是在阅读后修改的文本或你基本上是进口的只读目的的数据(即写入修改后的文本回文件。)? –

+0

我希望适合特定模式的行被写入到一个新文件中,以便最终我有一个新文件,其中包含与该模式匹配的原始文件中的所有行。原件不应该修改。 – Grrace

回答

1
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line = null; 
ArrayList<String> allLines = new ArrayList<String>(); 

while((line = br.readLine()) != null) { 
    allLines.add(line); 
    if (allLines.size() > 500) { 
      processLines(allLines); 
      allLines.clear(); 
    } 
} 

processLines(allLines); 
+0

谢谢。我有一个关于你的例子的问题:_allLines.size()> 500_指的是我添加的实际行数(可以说,如果我加3000,这将是大小?)?我一直认为“大小”是指ArrayList的总长度,但如果我理解正确,它是元素的数量......?这真的帮助我很多! – Grrace

+0

您提到一次只能阅读500行... –

+0

对不起,我的评论还没有完成。我不知道紧急返回不会创建新行;-) – Grrace

0

好吧,您在上面的评论中指出,您只想保留某些行,并根据某些逻辑将它们写入新文件。你可以一次读一行,决定是否保留它,如果是这样写入新文件。这种方法将使用很少的内存,因为你一次只能在内存中保存一行。下面是做到这一点的一种方法:

BufferedReader br = new BufferedReader(new FileReader(file)); 
String lineRead = null; 
FileWriter fw = new FileWriter(new File("newfile.txt"), false); 

while((lineRead = br.readLine()) != null) 
{ 
    if (true) // put your test conditions here 
    { 
     fw.write(lineRead); 
     fw.flush(); 
    } 
} 
fw.close(); 
br.close();