ホームページ  >  記事  >  Java  >  Javaを使用して多層フォルダ圧縮機能を実装する方法

Javaを使用して多層フォルダ圧縮機能を実装する方法

PHPz
PHPz転載
2023-04-30 09:16:061738ブラウズ

圧縮ファイル関連技術

1. 質問

多層フォルダー圧縮パッケージをリリースするツールを作成してください。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。