NIO2では、zipファイルを仮想ファイルシスムとして扱えるので、Files.walkFileTreeでzip内のファイルだけを対象にした処理を簡単に実装できる。
// zipのダウンロード
String url = "http://www.post.japanpost.jp/zipcode/dl/oogaki/zip/10gumma.zip";
final Path zip = Paths.get("10gumma.zip");
try (InputStream stream = new URL(url).openStream()) {
Files.copy(stream, zip, StandardCopyOption.REPLACE_EXISTING);
}
// zip内のcsvデータを標準出力に出力
try (FileSystem fileSystem = FileSystems.newFileSystem(zip, null)) {
Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
try (BufferedReader reader = Files.newBufferedReader(file, Charset.forName("windows-31j"))) {
reader.lines().forEach(System.out::println);
}
return FileVisitResult.CONTINUE;
}
});
}