バイナリファイルを読みこむだけならば ByteArrayInputStreamを使うことでバイト配列で取り込むことはできますが、しかしそれは、おそらく本来の目的とは違っており、圧縮されたログファイルが拡張子logのままで誤って扱われているのではないでしょうか。
例えばlog4jなどのロギングフレームワークの設定で、日別に分割したlogファイルが生成されるときにgzip形式で圧縮する設定をしているのに、拡張子の設定をlogに誤って設定している(通常はgzが付く)ケースがあるでしょう。
実際にはそのログファイルが、本当にテキストファイルなのか、それとも何らかのツールで暗号化されているかなどをきちんと確認してほしいのですが、以下のコードは、gzipファイルで圧縮された 文字コードが utf-8 のファイルを解凍してテキストを出力する例です。( commons-compress ならびに lombok を利用 しています )
java
1import java.io.ByteArrayOutputStream;
2import java.io.File;
3import java.io.FileInputStream;
4import java.io.IOException;
5
6import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
7
8import lombok.extern.log4j.Log4j2;
9
101113
14@Log4j2
15public class GZipIO {
16
17 1819
20 public static void main(String[] args) throws Exception {
21 // TODO 自動生成されたメソッド・スタブ
22 GZipIO io = new GZipIO();
23
24 String classpath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
25 io.read(classpath + "/" + wikipedia.gz");
26 }
27
28 public void read(String filename) {
29 log.info("filename - {}", filename);
30
31 try (
32 GzipCompressorInputStream gzipInputStream =
33 new GzipCompressorInputStream(
34 new FileInputStream(new File(filename))
35 )) {
36 ByteArrayOutputStream decompressBaos = new ByteArrayOutputStream();
37 int b;
38 while( (b = gzipInputStream.read()) != -1) {
39 decompressBaos.write(b);
40 };
41
42 byte[] decompressed = decompressBaos.toByteArray();
43 String text = new String(decompressed, "utf-8");
44 log.info(text);
45 } catch (IOException e) {
46 log.error(e);
47 }
48
49 }
50
51}
52
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/09 05:55