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

来源:互联网 发布:相片水印软件 编辑:程序博客网 时间:2024/06/05 17:51

这个程序可以让我们打开一个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