Maison > Java > javaDidacticiel > Comment utiliser Java pour implémenter la fonction de compression de dossiers multicouches

Comment utiliser Java pour implémenter la fonction de compression de dossiers multicouches

PHPz
Libérer: 2023-04-30 09:16:06
avant
1781 Les gens l'ont consulté

Technologies liées aux fichiers compressés

1. Sujet

Créer un outil pour publier des packages compressés de dossiers multicouches.

2. Idées de résolution de problèmes

Créez une classe : UnZipDirectoryFrame

Utilisez UnZipDirectoryFrame pour hériter de JFrame afin de créer un formulaire

Il y aura plusieurs dossiers dans le package compressé, et chaque dossier peut contenir des dossiers ou des fichiers. comprendre La relation hiérarchique des dossiers peut être restaurée lors de la compression.

Le schéma de décompression d'un dossier contenant des sous-dossiers est similaire à la décompression d'un dossier contenant tous les fichiers. La différence réside dans la façon de trouver tous les fichiers dans le dossier contenant des sous-dossiers, et lors de la construction du ZipEntry, il ne doit pas y avoir de noms en double.

3. Explication détaillée du code

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
 * 
Copier après la connexion
* @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(); } }

Comment utiliser Java pour implémenter la fonction de compression de dossiers multicouches

Décompression réussie :

Comment utiliser Java pour implémenter la fonction de compression de dossiers multicouches

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal