高效检索大型文本文件的最后一行
处理大量文本文件时,高效检索最后一行至关重要。对于大文件来说,随机访问可能非常耗时,因此不切实际。相反,请考虑以下解决方案:
返回最后一个非空行:
下面的 tail 函数可以快速检索文件的最后一个非空行,而无需加载或遍历整个文件。它查找文件末尾并向后读取字符,直到遇到换行符,然后构造并返回最后一行。
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
返回最后 N 行:
如果您需要最后 N 行,请使用 tail2 函数。它采用类似的技术,但它会在反转和构建输出之前计算换行符以确定所需的行。
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
调用并使用:
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Unicode注意事项:
实现使用字符反转来重建行。虽然通常有效,但这可能会导致重音符号和帽子等字符出现 Unicode 反转问题。因此,在跨各种语言使用此方法之前,彻底的测试至关重要。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3