java解压zip代码_通过java实现解压zip,rar的代码

package com.zuidaima.main;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.URL;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

import com.github.junrar.Archive;

import com.github.junrar.exception.RarException;

import com.github.junrar.rarfile.FileHeader;

/**

**/

public class Main {

public void extractZipFiles() {

String root ="c:/javazip/";

URL url = Main.class.getResource("/aa.zip");

String filename = url.getFile();

try {

// destination folder to extract the contents

byte[] buf = new byte[1024];

ZipInputStream zipinputstream = null;

ZipEntry zipentry;

zipinputstream = new ZipInputStream(new FileInputStream(filename));

zipentry = zipinputstream.getNextEntry();

while (zipentry != null) {

// for each entry to be extracted

String entryName = zipentry.getName();

System.out.println(entryName);

int n;

FileOutputStream fileoutputstream;

File newFile = new File(entryName);

String directory = newFile.getParent();

// to creating the parent directories

if (directory == null) {

if (newFile.isDirectory()) {

break;

}

} else {

new File(root + directory).mkdirs();

}

if (!zipentry.isDirectory()) {

System.out.println("File to be extracted....."+ entryName);

fileoutputstream = new FileOutputStream(root + entryName);

while ((n = zipinputstream.read(buf, 0, 1024)) > -1) {

fileoutputstream.write(buf, 0, n);

}

fileoutputstream.close();

}

zipinputstream.closeEntry();

zipentry = zipinputstream.getNextEntry();

}

zipinputstream.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public void extractRarFiles() {

URL url = Main.class.getResource("/bb.rar");

String filename = url.getFile();

File archive = new File(filename);

File destination = new File("c:/javazip/");

Archive arch = null;

try {

arch = new Archive(archive);

} catch (RarException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

if (arch != null) {

if (arch.isEncrypted()) {

System.out.println("archive is encrypted cannot extreact");

return;

}

FileHeader fh = null;

while (true) {

fh = arch.nextFileHeader();

if (fh == null) {

break;

}

if (fh.isEncrypted()) {

System.out.println("file is encrypted cannot extract:"

+ fh.getFileNameString());

continue;

}

System.out.println("extracting:"+ fh.getFileNameString());

try {

if (fh.isDirectory()) {

createDirectory(fh, destination);

} else {

File f = createFile(fh, destination);

OutputStream stream = new FileOutputStream(f);

arch.extractFile(fh, stream);

stream.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

private File createFile(FileHeader fh, File destination) {

File f = null;

String name = null;

if (fh.isFileHeader() && fh.isUnicode()) {

name = fh.getFileNameW();

} else {

name = fh.getFileNameString();

}

f = new File(destination, name);

if (!f.exists()) {

try {

f = makeFile(destination, name);

} catch (IOException e) {

e.printStackTrace();

}

}

return f;

}

private File makeFile(File destination, String name) throws IOException {

String[] dirs = name.split("\");

if (dirs == null) {

return null;

}

String path ="";

int size = dirs.length;

if (size == 1) {

return new File(destination, name);

} else if (size > 1) {

for (int i = 0; i < dirs.length - 1; i++) {

path = path + File.separator + dirs[i];

new File(destination, path).mkdir();

}

path = path + File.separator + dirs[dirs.length - 1];

File f = new File(destination, path);

f.createNewFile();

return f;

} else {

return null;

}

}

private void createDirectory(FileHeader fh, File destination) {

File f = null;

if (fh.isDirectory() && fh.isUnicode()) {

f = new File(destination, fh.getFileNameW());

if (!f.exists()) {

makeDirectory(destination, fh.getFileNameW());

}

} else if (fh.isDirectory() && !fh.isUnicode()) {

f = new File(destination, fh.getFileNameString());

if (!f.exists()) {

makeDirectory(destination, fh.getFileNameString());

}

}

}

private void makeDirectory(File destination, String fileName) {

String[] dirs = fileName.split("\");

if (dirs == null) {

return;

}

String path ="";

for (String dir : dirs) {

path = path + File.separator + dir;

new File(destination, path).mkdir();

}

}

public static void main(String[] args) {

Main main = new Main();

// extract zip

main.extractZipFiles();

// extract rar

main.extractRarFiles();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值