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)
a が必要です。File
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#));