core java ziptest 第12章如何从zip文件或者jar文件中读取数据

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.io.*;
  5. import javax.swing.filechooser.FileFilter;
  6. import java.util.*;
  7. import java.util.zip.*;
  8. public class ZipTest {
  9.     public static void main(String[]args){
  10.     ZipTestFrame  myframe=new ZipTestFrame();
  11.     myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  12.     myframe.show();
  13.     }
  14. }
  15. class ZipTestFrame extends JFrame{
  16.     private static final int DEFAULT_WIDTH=300;
  17.     private static final int DEFAULT_HEIGHT=400;
  18.     private String zipname;
  19.     private JComboBox fileCombo;
  20.     private JTextArea   fileText;
  21.     public ZipTestFrame(){
  22.         setTitle("zip-test-phenix");
  23.         setSize(this.DEFAULT_WIDTH,this.DEFAULT_HEIGHT);
  24.         //添加菜单
  25.         JMenuBar  menubar=new JMenuBar();
  26.         JMenu   menu=new JMenu("File");
  27.         
  28.         
  29.         JMenuItem openItem=new JMenuItem("open");
  30.         menu.add(openItem);
  31.         openItem.addActionListener(new OpenAction());
  32.         
  33.         JMenuItem  exitItem=new JMenuItem("Exit");
  34.         menu.add(exitItem);
  35.         exitItem.addActionListener(new ActionListener(){
  36.             public void actionPerformed(ActionEvent  event){
  37.                 System.exit(0);
  38.             }
  39.         });
  40.         menubar.add(menu);
  41.         setJMenuBar(menubar);
  42.         
  43.         //添加文本区和组合框
  44.         fileText=new JTextArea();
  45.         fileCombo=new JComboBox();
  46.         fileCombo.addActionListener(new 
  47.         ActionListener(){
  48.             public void actionPerformed(ActionEvent event){
  49.                 loadZipFile((String)fileCombo.getSelectedItem());
  50.                 System.out.println("***********输出****************");
  51.                 System.out.println((String)fileCombo.getSelectedItem());
  52.                 System.out.println("***********************     ***********");
  53.             }
  54.         }       
  55.         );
  56.         Container contentPane =getContentPane();
  57.         contentPane.add(fileCombo,BorderLayout.SOUTH);
  58.         contentPane.add(fileText,BorderLayout.CENTER);
  59.         
  60.     }
  61. //最重要的是这个函数,看他是如何读取压缩文件当中的数据
  62.     public void loadZipFile(String name){
  63.         try{
  64.             ZipInputStream  zin=new ZipInputStream(new FileInputStream(zipname));
  65.             ZipEntry  entry;
  66.             fileText.setText("");
  67.             
  68.             while((entry=zin.getNextEntry())!=null){
  69.                 if(entry.getName().equals(name)){
  70.                     BufferedReader  in=new BufferedReader(new InputStreamReader(zin));
  71.                     String line;
  72.                     while((line=in.readLine())!=null){
  73.                         fileText.append(line);
  74.                         fileText.append("/n");
  75.                     }
  76.                 }
  77.                 zin.closeEntry();
  78.             }
  79.             zin.close();
  80.         }
  81.         catch(IOException e){
  82.             e.printStackTrace();
  83.         }
  84.     }
  85.     private class OpenAction implements ActionListener{
  86.         public void actionPerformed(ActionEvent event){
  87.             JFileChooser chooser=new JFileChooser();
  88.             chooser.setCurrentDirectory(new File("."));
  89.             ExtensionFileFilter filter=new ExtensionFileFilter();
  90.             filter.addExtension(".zip");
  91.             filter.addExtension(".rar");
  92.             filter.addExtension(".jar");
  93.             filter.setDescription("zip archives");
  94.             chooser.setFileFilter(filter);
  95.             int r=chooser.showOpenDialog(ZipTestFrame.this);
  96.             if(r==JFileChooser.APPROVE_OPTION){
  97.                 zipname=chooser.getSelectedFile().getPath();
  98.                 System.out.println(zipname);
  99.                 scanZipFile();
  100.             }
  101.         }
  102.     }
  103.     public void scanZipFile(){
  104.         fileCombo.removeAllItems();
  105.         try{
  106.             ZipInputStream zin=new ZipInputStream(new FileInputStream(zipname)); 
  107.             ZipEntry  entry;
  108.             System.out.println("**********************************");
  109.             while((entry=zin.getNextEntry())!=null){
  110.                 fileCombo.addItem(entry.getName());
  111.                 zin.closeEntry();
  112.                 System.out.println(entry.getName());
  113.             }
  114.             System.out.println("**********************************");
  115.             zin.close();
  116.         }
  117.         catch(IOException e){
  118.             e.printStackTrace();
  119.         }
  120.     }
  121. }
  122. class ExtensionFileFilter extends FileFilter{
  123.     private String description;
  124.     private ArrayList extensions=new ArrayList();
  125.     public void addExtension(String extension){
  126.         if(!extension.startsWith(".")){
  127.             extension="."+extension;
  128.         }
  129.         extensions.add(extension.toLowerCase());
  130.     }
  131.     public void setDescription(String aDescription){
  132.         this.description=aDescription;
  133.         }
  134.     public String getDescription(){
  135.         return description;
  136.     }
  137.     public boolean accept(File f){
  138.         if(f.isDirectory()){return true;}
  139.         String name=f.getName().toLowerCase();
  140.         for(int i=0;i<this.extensions.size();i++){
  141.             if(name.endsWith((String)extensions.get(i)))
  142.                     {
  143.                     return true;
  144.             }
  145.         }
  146.         return false;
  147.     }
  148. }
  149. //仅支持jar文件和zip文件,不能支持rar文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值