• 通过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();
    }
    }
  • 相关阅读:
    二级菜单
    侧面导航
    QFileDialog文件保存
    GitHub for window
    Qt学习事件/信号
    开始RTThread之旅
    Qt事件过滤器
    LPC1768开发板液晶问题解决
    用QSplitter分裂器实现QTextEdit窗口大小的变化
    Qt之串口编程使用事件驱动来触发接收数据
  • 原文地址:https://www.cnblogs.com/wangfeng520/p/7064912.html
Copyright © 2020-2023  润新知