ファイルから読み込む。ファイル名のエンコードを指定する。PathやFilesを使って読み込む。break;//bufを使って処理}is.close();}zf.close();}↓JDK1.8では、Stream<ZipEntry>を返すstream()が使える。break;//bufを使って処理}is.close();}zf.close();}JDK1.5以降のJava版では、ジェネリクスを使うように拡張されている。Ant版は(ant用なので)そういった拡張はされないだろう。読み込み時のCRCチェック読み込んだデータが正しいか(破損していないか)どうか、CRCを使ってチェックすることが出来る。{zf.close();}}CheckedInputStream#getChecksum()の戻り型はCheckSumインターフェースだが、CRC32クラスはそのインターフェースを実装している。ZipFileSystemJDK1.7で、zipファイルをFileSystemクラスで読み書き出来るようになった。{〜}}FileSystemsのnewFileSystemメソッドでFileSystemの具象クラス(zipファイルの場合、ZipFileSystem)が返る。zipファイルの場合、第2引数のクラスローダーはnullでも大丈夫のようだ。found」という例外が発生する。zipファイルかどうかの判断はファイルの拡張子でしているわけではなく、実際に中身がzipかどうかを見ているようだ。zipファイル内のファイル(エントリー)は、ファイル名を指定してFileSystem#getPath()でPathとして取得する。あとは、普通のファイルと同様にFilesを使って読み込むことが出来る。envによって指定する。[2015-12-12](デフォルトはUTF-8)envを渡したい場合、zipファイルをPathのままで渡すメソッドは無い。URIに変換する必要がある。ZipFileSystemの場合、URIのスキーマは「jar」。URIの本体が「file://〜」というファイルパスになる。fs.getPath("テスト1.txt");Files.lines(path).forEach(System.out::println);}エントリー一覧の種類zipファイル内のエントリー一覧を取得したい場合は、FileSystem#getRootDirectories()を使ってルートパスを取得し(メソッド名は複数形だが、実際には「/」ひとつだけが返ってくる)、Files.walk()等で一覧を取得する。UncheckedIOException(e);}});}ZipFileSystemを使ったzipファイル作成ZipFileSystemを使ってzipファイルを作成および更新することが出来る。{br.write("test2");}}envを指定しない場合、zipファイルが存在していないとエラーになる。envでcreateにtrueを指定すると、zipファイルが存在していない場合は新規に作成される。zipファイルが存在していて、書き込もうとしたエントリー(ファイル)が既に存在している場合は、書き込もうとするとFileAlreadyExistsExceptionが発生する。Files.exists()でファイル(エントリー)が存在するかどうか判定できるし、Files.deleteIfExists()を使って存在する場合だけ削除することも出来る。{br.write("test1");}普通のディレクトリーを圧縮してzipファイルを作る例Files.copy()を使って、普通のディレクトリー内のファイルをzipファイル内にコピーすることも出来る。FileVisitResult.CONTINUE;}});}}zipファイルの暗号化・復号化zipファイルにはパスワードを付けることが出来るが、上記のクラスでは対応していない。[2007-12-14](javaではjarファイルとかを作るのが主目的だったので必要なかったのかな?)そこで、Info-ZIPのzipcloak(zipファイルの暗号化・復号化を行うコマンドらしい)をJavaに移植してみました。技術メモへ戻るメールの送信先:ひしだま。