Java中zip压缩解压缩如何实现成长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1022个文字,预计阅读时间需要5分钟。
Java中,可以使用ZipOutputStream和ZipInputStream实现zip文件的压缩和解压缩操作。此外,通过FileSystem也能实现zip的解压缩。以下介绍几种方式,并直接展示代码。
1. 使用ZipOutputStream和ZipInputStream进行压缩和解压缩:javaimport java.io.*;import java.util.zip.*;
public class ZipExample { public static void main(String[] args) throws IOException { File zipFile=new File(example.zip); File directory=new File(input);
zip(directory, zipFile); unzip(zipFile, new File(output)); }
public static void zip(File sourceDir, File zipFile) throws IOException { try (ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(zipFile))) { zip(sourceDir, , zos); } }
private static void zip(File sourceDir, String name, ZipOutputStream zos) throws IOException { if (sourceDir.isDirectory()) { if (!name.equals()) { name +=/; zos.putNextEntry(new ZipEntry(name)); zos.closeEntry(); } File[] children=sourceDir.listFiles(); if (children !=null) { for (File child : children) { zip(child, name + child.getName(), zos); } } } else { zos.putNextEntry(new ZipEntry(name)); try (FileInputStream fis=new FileInputStream(sourceDir)) { byte[] bytes=new byte[1024]; int length; while ((length=fis.read(bytes)) >=0) { zos.write(bytes, 0, length); } } zos.closeEntry(); } }
public static void unzip(File zipFile, File destDir) throws IOException { try (ZipInputStream zis=new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry=zis.getNextEntry(); while (entry !=null) { File newFile=new File(destDir, entry.getName()); if (!entry.isDirectory()) { decompressEntry(zis, newFile); } else { newFile.mkdirs(); } zis.closeEntry(); entry=zis.getNextEntry(); } } }
private static void decompressEntry(ZipInputStream zis, File dest) throws IOException { try (BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(dest))) { byte[] bytesIn=new byte[4096]; int read; while ((read=zis.read(bytesIn)) !=-1) { bos.write(bytesIn, 0, read); } } }}
2. 使用FileSystem进行解压缩:javaimport java.io.*;import java.nio.file.*;import java.nio.file.attribute.BasicFileAttributes;import java.util.zip.*;
public class ZipFileSystemExample { public static void main(String[] args) throws IOException { Path zipPath=Paths.get(example.zip); Path destDir=Paths.get(output);
Files.createDirectories(destDir);
try (FileSystem fs=FileSystems.newFileSystem(zipPath, (fs, path) -> { if (path.toString().endsWith(.zip)) { return new ZipFileSystem(fs, zipPath); } else { return null; } })) { Files.walkFileTree(destDir, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Path zipPath=fs.getPath(file.toString().replace(destDir.toString(), )); Path destPath=Paths.get(file.toString()); try (InputStream is=fs.newInputStream(zipPath); OutputStream os=new FileOutputStream(destPath.toFile())) { byte[] buffer=new byte[1024]; int len; while ((len=is.read(buffer)) > 0) { os.write(buffer, 0, len); } } return FileVisitResult.CONTINUE; } }); } }}
在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代码。
zip压缩
待压缩文件目录结构:
每个zip文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。
@Test public void testCompressByZip() { try ( //指定压缩完成后zip文件的存储路径 ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("F:\\myFavorites.zip")) ) { //待压缩文件/目录所在的目录 File fileFolder = new File("F:\\我的收藏"); //获取目录下的所有文件 File[] files = fileFolder.listFiles(); ZipEntry zipEntry; byte[] byteArray; int len; //遍历目录下的所有文件/目录,并将它们添加到压缩文件中 for (File file : files) { //一个ZipEntry对应压缩文件中的一项 zipEntry = new ZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); try (FileInputStream in = new FileInputStream(file)) { byteArray = new byte[1024]; while ((len = in.read(byteArray)) != -1) { zipOutputStream.write(byteArray, 0, len); } } catch (IOException ex) { ex.printStackTrace(); } zipOutputStream.closeEntry(); } } catch (IOException ex) { ex.printStackTrace(); } }
压缩结果:
zip解压缩
遍历zip文件中的所有项,并获取对应项的输入流,然后通过FileOutputStream输出到指定目录中。
@Test public void testDecompressByZip() { try ( //指定需要解压缩的zip文件 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("F:\\myFavorites.zip")) ) { ZipEntry zipEntry; byte[] byteArray; int len; //遍历zip文件中的所有项,并逐个解压到指定的目录中 while ((zipEntry = zipInputStream.getNextEntry()) != null) { try (FileOutputStream fileOutputStream = new FileOutputStream("F:\\我的解压目录\\" + zipEntry.getName())) { byteArray = new byte[1024]; while ((len = zipInputStream.read(byteArray)) != -1) { fileOutputStream.write(byteArray, 0, len); } } catch (IOException ex) { ex.printStackTrace(); } } } catch (IOException ex) { ex.printStackTrace(); } }
解压缩结果:
使用FileSystem解压缩
- 建立一个文件系统,包含zip文件中的所有项。
- 遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。
@Test public void testDecompressByZip2(){ try { //将压缩文件作为一个文件系统访问 FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"), null); //遍历压缩文件中的内容,并使用文件访问器访问所有内容 Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println("访问目录中文件时调用"); //将文件解压到指定目录 Files.copy(file, new FileOutputStream("F:\\我的解压目录\\" + file.getName(file.getNameCount() - 1))); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("访问目录中文件之前调用"); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { System.out.println("访问目录中文件失败时调用"); return FileVisitResult.SKIP_SUBTREE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.println("访问目录中的文件及其所有后代之后调用"); return FileVisitResult.CONTINUE; } }); } catch (IOException ex) { ex.printStackTrace(); } }
到此这篇关于Java中zip的压缩和解压缩的实现代码的文章就介绍到这了,更多相关java zip压缩和解压缩内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计1022个文字,预计阅读时间需要5分钟。
Java中,可以使用ZipOutputStream和ZipInputStream实现zip文件的压缩和解压缩操作。此外,通过FileSystem也能实现zip的解压缩。以下介绍几种方式,并直接展示代码。
1. 使用ZipOutputStream和ZipInputStream进行压缩和解压缩:javaimport java.io.*;import java.util.zip.*;
public class ZipExample { public static void main(String[] args) throws IOException { File zipFile=new File(example.zip); File directory=new File(input);
zip(directory, zipFile); unzip(zipFile, new File(output)); }
public static void zip(File sourceDir, File zipFile) throws IOException { try (ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(zipFile))) { zip(sourceDir, , zos); } }
private static void zip(File sourceDir, String name, ZipOutputStream zos) throws IOException { if (sourceDir.isDirectory()) { if (!name.equals()) { name +=/; zos.putNextEntry(new ZipEntry(name)); zos.closeEntry(); } File[] children=sourceDir.listFiles(); if (children !=null) { for (File child : children) { zip(child, name + child.getName(), zos); } } } else { zos.putNextEntry(new ZipEntry(name)); try (FileInputStream fis=new FileInputStream(sourceDir)) { byte[] bytes=new byte[1024]; int length; while ((length=fis.read(bytes)) >=0) { zos.write(bytes, 0, length); } } zos.closeEntry(); } }
public static void unzip(File zipFile, File destDir) throws IOException { try (ZipInputStream zis=new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry=zis.getNextEntry(); while (entry !=null) { File newFile=new File(destDir, entry.getName()); if (!entry.isDirectory()) { decompressEntry(zis, newFile); } else { newFile.mkdirs(); } zis.closeEntry(); entry=zis.getNextEntry(); } } }
private static void decompressEntry(ZipInputStream zis, File dest) throws IOException { try (BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(dest))) { byte[] bytesIn=new byte[4096]; int read; while ((read=zis.read(bytesIn)) !=-1) { bos.write(bytesIn, 0, read); } } }}
2. 使用FileSystem进行解压缩:javaimport java.io.*;import java.nio.file.*;import java.nio.file.attribute.BasicFileAttributes;import java.util.zip.*;
public class ZipFileSystemExample { public static void main(String[] args) throws IOException { Path zipPath=Paths.get(example.zip); Path destDir=Paths.get(output);
Files.createDirectories(destDir);
try (FileSystem fs=FileSystems.newFileSystem(zipPath, (fs, path) -> { if (path.toString().endsWith(.zip)) { return new ZipFileSystem(fs, zipPath); } else { return null; } })) { Files.walkFileTree(destDir, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Path zipPath=fs.getPath(file.toString().replace(destDir.toString(), )); Path destPath=Paths.get(file.toString()); try (InputStream is=fs.newInputStream(zipPath); OutputStream os=new FileOutputStream(destPath.toFile())) { byte[] buffer=new byte[1024]; int len; while ((len=is.read(buffer)) > 0) { os.write(buffer, 0, len); } } return FileVisitResult.CONTINUE; } }); } }}
在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代码。
zip压缩
待压缩文件目录结构:
每个zip文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。
@Test public void testCompressByZip() { try ( //指定压缩完成后zip文件的存储路径 ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("F:\\myFavorites.zip")) ) { //待压缩文件/目录所在的目录 File fileFolder = new File("F:\\我的收藏"); //获取目录下的所有文件 File[] files = fileFolder.listFiles(); ZipEntry zipEntry; byte[] byteArray; int len; //遍历目录下的所有文件/目录,并将它们添加到压缩文件中 for (File file : files) { //一个ZipEntry对应压缩文件中的一项 zipEntry = new ZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); try (FileInputStream in = new FileInputStream(file)) { byteArray = new byte[1024]; while ((len = in.read(byteArray)) != -1) { zipOutputStream.write(byteArray, 0, len); } } catch (IOException ex) { ex.printStackTrace(); } zipOutputStream.closeEntry(); } } catch (IOException ex) { ex.printStackTrace(); } }
压缩结果:
zip解压缩
遍历zip文件中的所有项,并获取对应项的输入流,然后通过FileOutputStream输出到指定目录中。
@Test public void testDecompressByZip() { try ( //指定需要解压缩的zip文件 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("F:\\myFavorites.zip")) ) { ZipEntry zipEntry; byte[] byteArray; int len; //遍历zip文件中的所有项,并逐个解压到指定的目录中 while ((zipEntry = zipInputStream.getNextEntry()) != null) { try (FileOutputStream fileOutputStream = new FileOutputStream("F:\\我的解压目录\\" + zipEntry.getName())) { byteArray = new byte[1024]; while ((len = zipInputStream.read(byteArray)) != -1) { fileOutputStream.write(byteArray, 0, len); } } catch (IOException ex) { ex.printStackTrace(); } } } catch (IOException ex) { ex.printStackTrace(); } }
解压缩结果:
使用FileSystem解压缩
- 建立一个文件系统,包含zip文件中的所有项。
- 遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。
@Test public void testDecompressByZip2(){ try { //将压缩文件作为一个文件系统访问 FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"), null); //遍历压缩文件中的内容,并使用文件访问器访问所有内容 Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println("访问目录中文件时调用"); //将文件解压到指定目录 Files.copy(file, new FileOutputStream("F:\\我的解压目录\\" + file.getName(file.getNameCount() - 1))); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("访问目录中文件之前调用"); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { System.out.println("访问目录中文件失败时调用"); return FileVisitResult.SKIP_SUBTREE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.println("访问目录中的文件及其所有后代之后调用"); return FileVisitResult.CONTINUE; } }); } catch (IOException ex) { ex.printStackTrace(); } }
到此这篇关于Java中zip的压缩和解压缩的实现代码的文章就介绍到这了,更多相关java zip压缩和解压缩内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

