Java SE 7 リリースで導入された Zip ファイルシステムプロバイダは、カスタムファイルシステムプロバイダの実装です。Zip ファイルシステムプロバイダは、Zip または JAR ファイルを 1 つのファイルシステムとして扱い、そのファイルの内容を操作する機能を提供します。Zip ファイルシステムプロバイダは、複数のファイルシステム (Zip または JAR ファイルごとに 1 つのファイルシステム) を作成します。
Java SE 7 インストール内の demo/nio/zipfs/src.zip ファイルには、Zip ファイルシステムプロバイダのソースコードが含まれています。また、Zip ファイルシステムプロバイダの使用方法を示す Demo.java クラスも含まれています。
java.nio.file.FileSystems クラスのファクトリメソッドを使用して、新しい Zip ファイルシステムを作成したり、既存の Zip ファイルシステムへの参照を取得したりできます。Zip ファイルシステムを作成するには、次のいずれかの方法で Zip または JAR ファイルのパスを指定します。
java.net.JarURLConnection クラスで定義されている JAR URL 構文を使用する
URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip");
FileSystem fs = FileSystems.newFileSystem(uri, env);
Path zipfile = Paths.get("/codeSamples/zipfs/zipfstest.zip");
FileSystem fs = FileSystems.newFileSystem(zipfile, env, null);
FileSystems.newFileSystem メソッドに渡される java.util.Map オブジェクトに、Zip ファイルシステムの構成オプションを指定します。Zip ファイルシステムのプロバイダ固有の構成プロパティーについては、「Zip ファイルシステムのプロパティー」を参照してください。
Zip ファイルシステムのインスタンスを作成したあとは、java.nio.file.FileSystem および java.nio.file.Path クラスのメソッドを呼び出して、ファイルのコピー、移動、名前変更や、ファイル属性の変更などの操作を実行できます。
次のコード例は、Zip ファイルシステムを作成し、その新しい Zip ファイルシステムにファイルをコピーする方法を示しています。
import java.util.*;
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.*;
public class ZipFSPUser {
public static void main(String [] args) throws Throwable {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
// locate file system by using the syntax
// defined in java.net.JarURLConnection
URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip");
try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
Path externalTxtFile = Paths.get("/codeSamples/zipfs/SomeTextFile.txt");
Path pathInZipfile = zipfs.getPath("/SomeTextFile.txt");
// copy a file into the zip file
Files.copy( externalTxtFile,pathInZipfile,
StandardCopyOption.REPLACE_EXISTING );
}
}
}