首页 > Java > java教程 > 怎么使用Java实现多层文件夹压缩功能

怎么使用Java实现多层文件夹压缩功能

PHPz
发布: 2023-04-30 09:16:06
转载
1758 人浏览过

压缩文件相关技术

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.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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板