Java进阶之旅第十五天
解压缩流
- 解压的本质: 把压缩包中的每一个文件或者文件夹读取出来,按照层级拷贝到目的地
- 在解压缩流中,每一个压缩文件、文件夹都是一个ZipEntry对象
构造方法
构造方法 | 说明 |
---|
public ZipInputStream(InputStream in) | 创建解压缩流 |
public ZipInputStream(InputStream in,Charset charset) | 创建解压缩流,并指定字符集 |
成员方法
成员方法 | 说明 |
---|
public ZipEntry getNextEntry() | 获取压缩包中的一个ZipEntry对象 |
public boolean isDirectory() | 判断ZipEntry对象是否是文件夹 |
public int read() | 读取zip解压缩流对象中一个字符 |
public int read([]byte b) | 读取zip解压缩流对象中[]byte 容量字节字符 |
public int read([]byte b,int off,int len) | 读取zip解压缩流对象中,从off开始读取len个字节并存储到[]byte 容量字节字符 |
public byte[] readAllBytes() | 读取zip解压缩流对象中所有的字符,返回值为[]bytes 数组 |
public void closeEntry() | 关闭ZipEntry对象 |
public void close() | 关闭整个解压缩流对象 |
代码(解压zip后缀压缩包
public static void main(String[] args) throws IOException {
File srcFile = new File("src\\666(1).zip");
File destFile = new File("src\\666");
UnzipFile(srcFile,destFile);
}
public static void UnzipFile(File src, File dest) throws IOException {
ZipInputStream zip = new ZipInputStream(new FileInputStream(src));
ZipEntry entry;
while((entry = zip.getNextEntry())!=null){
System.out.println(entry);
File file = new File(dest,entry.toString());
file.getParentFile().mkdirs();
if(entry.isDirectory()){
file.mkdirs();
}else{
FileOutputStream fos = new FileOutputStream(file);
int len;
while((len = zip.read())!=-1){
fos.write(len);
}
zip.closeEntry();
fos.close();
}
}
zip.close();
}
压缩流
- 本质:把每一个(文件、文件夹)看成ZipEntry对象放到压缩包中
构造方法
构造方法 | 说明 |
---|
public ZipOutputStream(InputStream in) | 创建压缩流 |
public ZipOutputStream(InputStream in,Charset charset) | 创建压缩流,并指定字符集 |
成员方法
成员方法 | 说明 |
---|
public void putNextEntry(ZipEntry) | 将ZipEntry对象放入压缩包当中 |
public int write() | 将文件内容写入压缩流文件当中(一次一个字节 |
public int write([]byte b) | 将文件内容写入压缩流文件当中([]byte 容量字节字符 |
public int write([]byte b,int off,int len) | 将文件内容写入压缩流文件当中,从off开始读取len个字节并存储到[]byte 容量字节字符 |
public void closeEntry() | 关闭ZipEntry对象 |
public void close() | 关闭整个压缩流对象 |
代码(压缩文件
public static void main(String[] args) throws IOException {
File src = new File("src\\666");
File destParent = src.getParentFile();
String zipName = src.getName() + ".zip";
File dest = new File(destParent,zipName);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
toZip(src,zos,src.getName());
zos.close();
}
public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
for (File file : src.listFiles()) {
if(file.isFile()){
ZipEntry entry = new ZipEntry(name+"\\"+file.getName());
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(file);
int len;
byte[] data = new byte[1024];
while((len = fis.read(data))!=-1){
zos.write(data,0,len);
}
fis.close();
zos.closeEntry();
}else{
toZip(file,zos,name+"\\"+file.getName());
}
}
}