開発プロセス中、ハードディスクの容量を節約するためにファイルを圧縮する必要がある場合があります。では、Java を使用してファイルを圧縮および解凍するにはどうすればよいでしょうか。それはとても簡単です。Java はファイルの圧縮と解凍を行うパッケージを提供します。そのパッケージは java.util.zip です (注: このパッケージには非常に厄介な点があります。中国語のパスは文字化けします)。この
コード文字化け問題を解決するには: Apache の ant.jar パッケージを使用するだけで、ネイティブ JDK でコードを作成する場合は、インポート パッケージ
1 を変更するだけで済みます。 pointディレクトリ エントリ ポイントがフォルダーの場合、名前はパス区切り文字で終わる必要があります。Windows オペレーティング システムでは、名前区切り文字は「/」です。
2. ファイルの自動作成
3. ディレクトリの作成
ZipEntry entry = new ZipEntry(压缩文件夹名称 + File.separator+文件或文件夹路径);
3.デモ
package com.javase.io;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class ZipUtils { /** * 压缩一个文件夹 * * @throws IOException */ public void zipDirectory(String path) throws IOException { File file = new File(path); String parent = file.getParent(); File zipFile = new File(parent, file.getName() + ".zip"); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); zip(zos, file, file.getName()); zos.flush(); zos.close(); } /** * * @param zos * 压缩输出流 * @param file * 当前需要压缩的文件 * @param path * 当前文件相对于压缩文件夹的路径 * @throws IOException */ private void zip(ZipOutputStream zos, File file, String path) throws IOException { // 首先判断是文件,还是文件夹,文件直接写入目录进入点,文件夹则遍历 if (file.isDirectory()) { ZipEntry entry = new ZipEntry(path + File.separator);// 文件夹的目录进入点必须以名称分隔符结尾 zos.putNextEntry(entry); File[] files = file.listFiles(); for (File x : files) { zip(zos, x, path + File.separator + x.getName()); } } else { FileInputStream fis = new FileInputStream(file);// 目录进入点的名字是文件在压缩文件中的路径 ZipEntry entry = new ZipEntry(path); zos.putNextEntry(entry);// 建立一个目录进入点 int len = 0; byte[] buf = new byte[1024]; while ((len = fis.read(buf)) != -1) { zos.write(buf, 0, len); } zos.flush(); fis.close(); zos.closeEntry();// 关闭当前目录进入点,将输入流移动下一个目录进入点 } }}
オブジェクト を作成し、ディレクトリ エントリ ポイントの内容をハードディスク ファイルに書き込みます。
2.デモ
package com.javase.io;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class ZipUtils {private String basePath; /** * 解压文件 * * @param unzip * @throws IOException */ public void unzip(String unzip) throws IOException { File file = new File(unzip); basePath = file.getParent(); FileInputStream fis = new FileInputStream(file); ZipInputStream zis = new ZipInputStream(fis); unzip(zis); } private void unzip(ZipInputStream zis) throws IOException { ZipEntry entry = zis.getNextEntry(); if (entry != null) { File file = new File(basePath + File.separator + entry.getName()); if (file.isDirectory()) { // 可能存在空文件夹 if (!file.exists()) file.mkdirs(); unzip(zis); } else { File parentFile = file.getParentFile(); if (parentFile != null && !parentFile.exists()) parentFile.mkdirs(); FileOutputStream fos = new FileOutputStream(file);// 输出流创建文件时必须保证父路径存在 int len = 0; byte[] buf = new byte[1024]; while ((len = zis.read(buf)) != -1) { fos.write(buf, 0, len); } fos.flush(); fos.close(); zis.closeEntry(); unzip(zis); } } } }
以上がJava での圧縮と解凍の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。