解压缩zip包到目标文件夹
1 public static void unConpressZip(String zipPath, String destPath) throws IOException {2 if(!destPath.endsWith(File.separator)){
3 destPath = destPath + File.separator;
4 File file = new File(destPath);
5 if(!file.exists()){
6 file.mkdirs();
7 }
8 }
9 // 新建文件输入流类,
10 FileInputStream fis = new FileInputStream(zipPath);
11
12 // 给输入流增加检验功能
13 CheckedInputStream checkedIns = new CheckedInputStream(fis,new Adler32());
14
15 // 新建zip输出流,因为读取的zip格式的文件嘛
16 ZipInputStream zipIn = new ZipInputStream(checkedIns);
17
18 // 增加缓冲流功能,提高性能
19 BufferedInputStream buffIn = new BufferedInputStream(zipIn);
20
21 // 从zip输入流中读入每个ZipEntry对象
22 ZipEntry zipEntry;
23 while ((zipEntry = zipIn.getNextEntry()) != null){
24 System.out.println("解压中" + zipEntry);
25
26 // 将解压的文件写入到目标文件夹下
27 int size;
28 byte[] buffer = new byte[1024];
29 FileOutputStream fos = new FileOutputStream(destPath + zipEntry.getName());
30 BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length);
31 while ((size = buffIn.read(buffer, 0, buffer.length)) != -1) {
32 bos.write(buffer, 0, size);
33 }
34 bos.flush();
35 bos.close();
36 }
37 buffIn.close();
38
39 // 输出校验和
40 System.out.println("校验和:" + checkedIns.getChecksum().getValue());
41 }
42
43 // 在main函数中直接调用
44 public static void main(String[] args) throws IOException {
45 String dir = "d:";
46 String zipPath = "d:/test.zip";
47// File[] files = Directory.getLocalFiles(dir,".*\\.txt");
48// ZipFileUtils.compressFiles(files, zipPath);
49
50 ZipFileUtils.unConpressZip(zipPath,"F:/ziptest");
51 }
这里解压zip包还有一种更加简便的方法,使用ZipFile对象。该对象的entries()方法直接返回ZipEntry类型的枚举。看下代码片段:
1 ZipFile zipFile = new ZipFile("test.zip");2 Enumeration e = zipFile.entries();
3 while (e.hasMoreElements()){
4 ZipEntry zipEntry = (ZipEntry) e.nextElement();
5 System.out.println("file:" + zipEntry);
6 }
对象序列化
什么是序列化和反序列化呢?
序列化就是将对象转成字节序列的过程,反序列化就是将字节序列重组成对象的过程。
在这里插入图片描述为什么要有对象序列化机制
程序中的对象,其实是存在有内存中,当我们JVM关闭时,无论如何它都不会继续存在了。那有没有一种机制能让对象具有“持久性”呢?序列化机制提供了一种方法,你可以将对象序列化的字节流输入到文件保存在磁盘上。
序列化机制的另外一种意义便是我们可以通过网络传输对象了,Java中的 远程方法调用(RMI),底层就需要序列化机制的保证。
在Java中怎么实现序列化和反序列化