Javaには、ZIPファイルを操作するクラスが用意されているんでそれを使えば楽ちんに操作ができる。

まず、アーカイブファイルを作る。

        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        try {
            // アーカイブファイルを用意する。
            fos = new FileOutputStream("c:\\tmp\\test.zip");
            zos = new ZipOutputStream(fos);

            // アーカイブに含めるファイル
            ZipEntry zentry = new ZipEntry("test/test01.txt");
            // エントリーを追加
            zos.putNextEntry(zentry);
            // アーカイブに含めるファイルの中身
            byte []data = "test01".getBytes(StandardCharsets.UTF_8);
            zos.write(data);

            // さらに追加
            zentry = new ZipEntry("test/test02.txt");
            zos.putNextEntry(zentry);
            data = "test02".getBytes(StandardCharsets.UTF_8);
            zos.write(data);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if(zos != null) {
                try {
                    zos.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(fos != null) {
                try {
                    fos.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

アーカイブに含まれるファイルの一覧を出す。

        FileInputStream fin = null;
        ZipInputStream zin = null;
        try {
            // アーカイブファイルをオープン
            fin = new FileInputStream("c:\\tmp\\test.zip");
            zin = new ZipInputStream(fin);
            
            ZipEntry zent;
            while((zent = zin.getNextEntry()) != null) {
                System.out.println(zent.getName());
                zin.closeEntry();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if(zin != null) {
                try {
                    zin.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(fin != null) {
                try {
                    fin.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

アーカイブからファイルを取り出して表示する。

        ZipFile zfile = null;
        BufferedReader br = null;
        InputStream is = null;
        InputStreamReader isr = null;
        try {
            zfile = new ZipFile("c:\\tmp\\test.zip");
            ZipEntry zent = zfile.getEntry("test/test02.txt");
            is = zfile.getInputStream(zent);
            isr = new InputStreamReader(is, Charset.forName("utf-8"));
            br = new BufferedReader(isr);
            String line;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException ex) {
            Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if(br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(isr != null) {
                try {
                    isr.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(is != null) {
                try {
                    is.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(zfile != null) {
                try {
                    zfile.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestZip.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }