ZipTest

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

public class ZipTest{ 
   public static void main(String[] args){ 
      ZipTestFrame frame = new ZipTestFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

class ZipTestFrame extends JFrame{
   public static final int DEFAULT_WIDTH = 400;
   public static final int DEFAULT_HEIGHT = 300; 

   private JComboBox fileCombo;
   private JTextArea fileText;
   private String zipname;
  
   public ZipTestFrame(){
      setTitle("Zip演示");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      // 增加打開、關閉子菜單
      JMenuBar menuBar = new JMenuBar();
      JMenu menu = new JMenu("文件");

      JMenuItem openItem = new JMenuItem("打開");
      menu.add(openItem);
      openItem.addActionListener(new OpenAction());

      JMenuItem exitItem = new JMenuItem("關閉");
      menu.add(exitItem);
      exitItem.addActionListener(new
         ActionListener(){
            public void actionPerformed(ActionEvent event){
               System.exit(0);
            }
         });

      menuBar.add(menu);
      setJMenuBar(menuBar);

      // 添加文本域和下拉選擇框
      fileText = new JTextArea();
      fileCombo = new JComboBox();
      fileCombo.addActionListener(new
         ActionListener(){
            public void actionPerformed(ActionEvent event){
               loadZipFile((String) fileCombo.getSelectedItem());
            }
         });

      add(fileCombo, BorderLayout.SOUTH);
      add(new JScrollPane(fileText), BorderLayout.CENTER);
   }

   /**
      ”打開“菜單的監聽器
   */
   private class OpenAction implements ActionListener{
      public void actionPerformed(ActionEvent event){
         JFileChooser chooser = new JFileChooser();
         chooser.setCurrentDirectory(new File("."));
         ExtensionFileFilter filter = new ExtensionFileFilter();
         filter.addExtension(".zip");
         filter.addExtension(".jar");
         filter.setDescription("ZIP archives");
         chooser.setFileFilter(filter);
         int r = chooser.showOpenDialog(ZipTestFrame.this);
         if (r == JFileChooser.APPROVE_OPTION){ 
            zipname = chooser.getSelectedFile().getPath();
            scanZipFile();
         } 
      }
   }

   /**
      掃描壓縮文件的子項,並把名字增加到下拉選擇框
   */
   public void scanZipFile(){ 
      fileCombo.removeAllItems();
      try{ 
         ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));
         ZipEntry entry;
         while ((entry = zin.getNextEntry()) != null){ 
            fileCombo.addItem(entry.getName());
            zin.closeEntry();
         }
         zin.close();
      }catch (IOException e){ 
         e.printStackTrace();
      }
   }

   /**
      從壓縮文件中加載選擇的文件名,並顯示到文本域
      @param name 壓縮文件中的名字
   */
   public void loadZipFile(String name){ 
      try{ 
         ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));
         ZipEntry entry;
         fileText.setText("");

         // 從壓縮文件中查找匹配的文件名
         while ((entry = zin.getNextEntry()) != null){ 
            if (entry.getName().equals(name)){
               BufferedReader in = new BufferedReader(new InputStreamReader(zin));
               String line;
               while ((line = in.readLine()) != null){
                  fileText.append(line);
                  fileText.append("/n");
               }
            }
            zin.closeEntry();
         }
         zin.close();
      }catch (IOException e){ 
         e.printStackTrace();
      }
   }
}


class ExtensionFileFilter extends FileFilter{
   private String description = "";
   private ArrayList<String> extensions = new ArrayList<String>();
  
   /**
      增加文件名後綴
      @param extension 文件名後綴 (如: ".txt" or "txt")
   */
   public void addExtension(String extension){
      if (!extension.startsWith("."))
         extension = "." + extension;
      extensions.add(extension.toLowerCase());    
   }

   public void setDescription(String aDescription){
      description = aDescription;
   }

   public String getDescription(){
      return description;
   }

   public boolean accept(File f){
      if (f.isDirectory()) return true;
      String name = f.getName().toLowerCase();

      // check if the file name ends with any of the extensions
      for (String e : extensions)
         if (name.endsWith(e))
            return true;
      return false;
   }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章