> Java > java지도 시간 > 본문

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

PHPz
풀어 주다: 2023-04-30 09:16:06
앞으로
1751명이 탐색했습니다.

압축파일 관련 기술

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.size(); i++) { model.addRow(new Object[] { i + 1, list.get(i) }); } table.setModel(model); JOptionPane.showMessageDialog(this, "解压缩完成"); } catch (IOException e) { e.printStackTrace(); } } private static void unzip(File zipFile, List 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿