プレーンテキストファイルの束を含むZipアーカイブがあります。各テキストファイルのデータを解析したいと思います。これが私がこれまでに書いたものです:
try {
final ZipFile zipFile = new ZipFile(chooser.getSelectedFile());
final Enumeration<? extends ZipEntry> entries = zipFile.entries();
ZipInputStream zipInput = null;
while (entries.hasMoreElements()) {
final ZipEntry zipEntry = entries.nextElement();
if (!zipEntry.isDirectory()) {
final String fileName = zipEntry.getName();
if (fileName.endsWith(".txt")) {
zipInput = new ZipInputStream(new FileInputStream(fileName));
final RandomAccessFile rf = new RandomAccessFile(fileName, "r");
String line;
while((line = rf.readLine()) != null) {
System.out.println(line);
}
rf.close();
zipInput.closeEntry();
}
}
}
zipFile.close();
}
catch (final IOException ioe) {
System.err.println("Unhandled exception:");
ioe.printStackTrace();
return;
}
これを行うにはRandomAccessFileが必要ですか? ZipInputStreamを入手した時点で迷子になっています。
いいえ、RandomAccessFile
は必要ありません。まず、このZipファイルエントリのデータを含むInputStream
を取得します。
InputStream input = zipFile.getInputStream(entry);
次に、それをInputStreamReader
(バイナリからテキストにデコードするため)とBufferedReader
(一度に1行を読み取るため)でラップします。
BufferedReader br = new BufferedReader(new InputStreamReader(input, "UTF-8"));
次に、通常どおりそこから行を読み取ります。すべてのリソースを閉じるために、通常どおりtry/finally
ブロック内のすべての適切なビットもラップします。