ZIP
如果要从ZIP压缩管理文件内读取某个文件,要先找到对应文件的 目录进入点(知道ZIP文件内的位置),才能读取这个文件的内容。
压缩文件
利用ZipOutputStream类对象可以将文件压缩为 .zip文件
构造方法
ZipOutputStream(OutputStream out);
常用方法
putNextEntry(ZipEntry e) 开始写一个新的ZipEntry,并将流内的位置移至此entry所指数据的开头
write(bytr[] b,int offset,int len) 将字节数组写入当前ZIP条数据
finish() 完成写入ZIP输出流的内容,无须关闭它所配合的OutputStream
setComment(String comment) 可设置此ZIP文件的注释文字
解压ZIP文件
ZipInputStream类可读取Zip压缩格式的文件
构造方法
ZipInputStream(InputStream in);
常用方法
read(byte[] b,int offset,int len) 读取目标b数组内offset偏移量的位置,长度是len字节
available() 判断是否已读完目前entry所指定的数据。已读完返回0,否则返回1
closeEntry() 关闭当前zip条目并定位流以读取下一个条目
skip(long n) 跳过当前zip条目中指定的字节数
getNextEntry() 读取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头
createZipEntry(String name) 以指定的name参数新建一个ZipEntry对象
举(坏)栗子
import java.io.File;//这一大堆的都很重要,书上都省略了
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Decompressing {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("软件学院.zip"));
ZipEntry entry = zipInputStream.getNextEntry();
while (((entry = zipInputStream.getNextEntry()) != null) && !entry.isDirectory()) {
File file = new File("C:\\Users\\Zhang"+entry.getName());
System.out.println(file);
if (!file.exists()) {
file.mkdirs();
file.createNewFile();
}
zipInputStream.closeEntry();
System.out.println(entry.getName() + "解压成功!");
}
zipInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
失败告终