处理巨大的管道分隔文件

时间:2011-07-18 10:05:13

标签: java filechannel

参考我以前的帖子

Remove first line from a delimited file

我能够处理较小的文件并删除第一行....但是由于我正在读取整个文件然后再将其写回来,因此存在大量文件存在内存问题。

任何人都可以建议更好地替代这个问题。

感谢Advance。

的Vivek

2 个答案:

答案 0 :(得分:1)

您必须逐行阅读文件并将其写入:

BufferedReader reader = new BufferedReader(new FileReader("foo.txt"));
PrintWriter writer = new PrintWriter(new FileWriter("_foo.txt"));

String line;
boolean firstLine = true;

while ( (line = reader.readLine()) !=null) {
    if (!firstLine) {
        writer.println(line);
        firstLine = false;
    }
}

答案 1 :(得分:0)

为避免重写整个文件以删除一行,您可以维护文件“start”的索引。此索引是您认为开始的位置以及从哪里开始读取文件的位置。定期例如每晚一次,你可以重写文件,这样“开始”就是文件实际开始的地方。

此“开始”位置可以存储在另一个时间或现有文件的开头。

这意味着您可以逐步“删除”文件的所有行而无需重写它。