Java核心技术II:ZiP压缩文档

这个程序可以让我们打开一个zip文件,在屏幕底部有一个组合框显示了zip文件中的文件,如果选中其中一个,那么这个文件的内容就会显示在文本域中。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.MenuBar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.List;
import java.util.Scanner;

import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;

/**
 * 
 * @author Administrator
 *新浪微博:ouc大飞
 */
public class ZipTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EventQueue.invokeLater(new  Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                ZipTestFrame frame=new  ZipTestFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocation(300,400);
                frame.setVisible(true);
            }
        });

    }

}

class ZipTestFrame extends JFrame{
    public ZipTestFrame(){
        setTitle("ZipTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        JMenuBar bar=new  JMenuBar();
        JMenu menu=new  JMenu("file");

        JMenuItem item=new  JMenuItem("open");
        menu.add(item);

        item.addActionListener(new  ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                JFileChooser chooser=new  JFileChooser();
                chooser.setCurrentDirectory(new  File("D:\\"));
                int r=chooser.showOpenDialog(ZipTestFrame.this);
                if (r==JFileChooser.APPROVE_OPTION) {
                    zipname=chooser.getSelectedFile().getPath();
                    fileCombo.removeAllItems();
                    scanZipFile();
                }
            }
        });
        JMenuItem exitItem=new  JMenuItem("exit");
        menu.add(exitItem);
        exitItem.addActionListener(new  ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
        bar.add(menu);
        setJMenuBar(bar);

        fileText=new  JTextArea();
        fileCombo=new  JComboBox<>();
        fileCombo.addActionListener(new  ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                loadZipFile((String)fileCombo.getSelectedItem());
            }
        });
        add(fileCombo,BorderLayout.SOUTH);
        add(new  JScrollPane(fileText),BorderLayout.CENTER);
    }
    public void scanZipFile(){
        new  SwingWorker<Void, String>(){

            @Override
            protected Void doInBackground() throws Exception {
                // TODO Auto-generated method stub
                ZipInputStream zin=new  ZipInputStream(new  FileInputStream(zipname));
                ZipEntry entry;
                while ((entry=zin.getNextEntry())!=null) {
                    publish(entry.getName());
                    zin.closeEntry();

                }
                zin.close();
                return null;
            }
            protected void process(List<String> names){
                for(String name:names)
                    fileCombo.addItem(name);

            }

        }.execute();
    }
    public void loadZipFile(final String name){
        fileCombo.setEnabled(false);
        fileText.setText("");
        new  SwingWorker<Void, Void>(){

            @Override
            protected Void doInBackground() throws Exception {
                // TODO Auto-generated method stub
                try {
                    ZipInputStream zin=new  ZipInputStream(new  FileInputStream(zipname));
                    ZipEntry entry;
                    while ((entry=zin.getNextEntry())!=null) {
                        if (entry.getName().equals(name)) {
                            Scanner in=new  Scanner(zin);
                            while (in.hasNextLine()) {
                                fileText.append(in.nextLine());
                                fileText.append("\n");

                            }
                        }
                        zin.closeEntry();
                    }
                    zin.close();
                } catch (Exception e) {
                    // TODO: handle exception
                }
                return null;
            }
            public void done(){
                fileCombo.setEnabled(true);
            }

        }.execute();
    }
    public static final int DEFAULT_WIDTH=400;
    public static final int DEFAULT_HEIGHT=300;
    private String zipname;
    private JComboBox fileCombo;
    private JTextArea fileText;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值