我想读取压缩在 zip 文件中的大 txt 文件的最后 n 行而不解压缩它。
这就是我现在所拥有的:
ZipFile zf = new ZipFile(file.getAbsolutePath());
Enumeration<?> entries = zf.entries();
ZipEntry ze = (ZipEntry) entries.nextElement();
BufferedReader in = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
void readLastNLines(BufferedReader bf){
//some code here
}
我正在考虑使用的方式,RandomAccessFile(File file, String mode)
但它需要 aFile
作为参数。不能将 Zip 文件视为目录,因此我无法通过它。
有任何想法吗?
感谢任何帮助和投入。
谢谢!
[编辑] 我想出了一种效率较低的方法来实现这一目标:
由于RandomAccessFile
无法使用,我使用了以下InputStream
方法:
InputStream is = zf.getInputStream(ze);
int length = is.available();
byte[] bytes = new byte[length];
int ch = -1;
while ((ch = is.read()) != -1) {
bytes[--length] = (byte) ch;
}
String line = new String(bytes);
//reverse the string
String newLine = new StringBuilder(line).reverse().toString();
//Select how many lines do you want(some number = number of bytes)
System.out.println(newLine.substring(line.length()-#some number#));