>  기사  >  Java  >  Java를 사용하여 다층 폴더 압축 기능을 구현하는 방법

Java를 사용하여 다층 폴더 압축 기능을 구현하는 방법

PHPz
PHPz앞으로
2023-04-30 09:16:061752검색

압축파일 관련 기술

1. Topic

다중 폴더 압축 패키지를 공개하는 도구를 만듭니다.

2. 문제 해결 아이디어

클래스 만들기: UnZipDirectoryFrame

UnZipDirectoryFrame을 사용하여 JFrame을 상속하여 양식을 만듭니다.

압축된 패키지에는 여러 개의 폴더가 있으며 각 폴더에는 폴더나 파일이 있을 수 있습니다. 이해 폴더의 계층 관계는 압축 중에 복원될 수 있습니다.

하위 폴더가 포함된 폴더의 압축을 푸는 방법은 모든 파일이 포함된 폴더의 압축을 푸는 방식과 유사합니다. 차이점은 하위 폴더가 포함된 폴더에서 모든 파일을 찾는 방법에 있으며, ZipEntry를 구성할 때 중복된 이름이 없어야 합니다.

3. 자세한 코드 설명

package com.xiaoxuzhu;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
/**
 * Description: 多层文件夹压缩包的释放
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre class="brush:php;toolbar:false">
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/4.1	    xiaoxuzhu		2022/5/4		    Create
 * 
 * @date 2022/5/4  */ public class UnZipDirectoryFrame extends JFrame {     /**      *      */     private static final long serialVersionUID = 7178478435446172846L;     private JPanel contentPane;     private JTextField chooseTextField;     private JTable table;     private File zipFile;     /**      * Launch the application.      */     public static void main(String[] args) {         EventQueue.invokeLater(new Runnable() {             public void run() {                 try {                     UnZipDirectoryFrame frame = new UnZipDirectoryFrame();                     frame.setVisible(true);                 } catch (Exception e) {                     e.printStackTrace();                 }             }         });     }     /**      * Create the frame.      */     public UnZipDirectoryFrame() {         setTitle("多层文件夹压缩包的释放");         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         setBounds(100, 100, 450, 300);         contentPane = new JPanel();         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));         setContentPane(contentPane);         contentPane.setLayout(new BorderLayout(0, 0));         JPanel choosePanel = new JPanel();         contentPane.add(choosePanel, BorderLayout.NORTH);         chooseTextField = new JTextField();         choosePanel.add(chooseTextField);         chooseTextField.setColumns(18);         JButton chooseButton = new JButton("选择压缩文件");         chooseButton.addActionListener(new ActionListener() {             public void actionPerformed(ActionEvent arg0) {                 do_chooseButton_actionPerformed(arg0);             }         });         choosePanel.add(chooseButton);         JPanel buttonPanel = new JPanel();         contentPane.add(buttonPanel, BorderLayout.SOUTH);         JButton unzipButton = new JButton("开始解压缩");         unzipButton.addActionListener(new ActionListener() {             public void actionPerformed(ActionEvent arg0) {                 do_unzipButton_actionPerformed(arg0);             }         });         buttonPanel.add(unzipButton);         JScrollPane scrollPane = new JScrollPane();         contentPane.add(scrollPane, BorderLayout.CENTER);         table = new JTable();         scrollPane.setViewportView(table);     }     protected void do_chooseButton_actionPerformed(ActionEvent arg0) {         JFileChooser fileChooser = new JFileChooser();         fileChooser.setFileFilter(new FileNameExtensionFilter("文本文件", "zip"));         fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);         int result = fileChooser.showOpenDialog(this);         if (result == JFileChooser.APPROVE_OPTION) {             zipFile = fileChooser.getSelectedFile();             chooseTextField.setText(zipFile.getAbsolutePath());         }     }     protected void do_unzipButton_actionPerformed(ActionEvent arg0) {         DefaultTableModel model = (DefaultTableModel) table.getModel();         model.setColumnIdentifiers(new Object[] { "序号", "文件名" });         List list = new ArrayList();         try {             unzip(zipFile, list);             for (int i = 0; i  list) throws IOException {         // 利用用户选择的ZIP文件创建ZipInputStream对象         ZipInputStream in = new ZipInputStream(new FileInputStream(zipFile));         ZipEntry entry;         while ((entry = in.getNextEntry()) != null) {// 遍历所有ZipEntry对象             if (!entry.isDirectory()) {// 如果是文件则创建并写入                 File tempFile = new File(zipFile.getParent() + File.separator + entry.getName());                 list.add(tempFile.getName());// 增加文件名                 new File(tempFile.getParent()).mkdirs();// 创建文件夹                 tempFile.createNewFile();// 创建新文件                 FileOutputStream out = new FileOutputStream(tempFile);                 int b;                 while ((b = in.read()) != -1) {// 写入数据                     out.write(b);                 }                 out.close();// 释放资源             }         }         in.close();     } }

Java를 사용하여 다층 폴더 압축 기능을 구현하는 방법

압축해제 성공:

Java를 사용하여 다층 폴더 압축 기능을 구현하는 방법

위 내용은 Java를 사용하여 다층 폴더 압축 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제