读书人

ZipInputStream报java.lang.IllegalAr

发布时间: 2012-01-08 22:48:50 作者: rapoo

ZipInputStream报java.lang.IllegalArgumentException

Java code
package com.hss.chap13;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.IOException;import java.util.Scanner;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;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;public class Chap13_03 {    /**     * @param args     */    public static void main(String[] args) {            EventQueue.invokeLater(new Runnable(){            public void run() {                ZipFrame zf = new ZipFrame();                zf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                zf.setVisible(true);            }                    });    }}class ZipFrame extends JFrame{        public ZipFrame(){        this.setBounds(200, 200, 500, 400);        this.setLayout(new BorderLayout());        //工具栏布局        JMenuBar jmb = new JMenuBar();        JMenu jm = new JMenu("file");        JMenuItem jmi1 = new JMenuItem("open");        JMenuItem jmi2 = new JMenuItem("exit");        jm.add(jmi1);        jm.add(jmi2);        jmb.add(jm);        this.setJMenuBar(jmb);                //添加处理事件        jmi1.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {                JFileChooser jfc = new JFileChooser();                jfc.setCurrentDirectory(new File("."));                int r = jfc.showOpenDialog(ZipFrame.this);                if(r==JFileChooser.APPROVE_OPTION){                    zipname=jfc.getSelectedFile().getPath();                    try {                        scannerFile();                    } catch (IOException e1) {                        e1.printStackTrace();                    }                }            }                                });        jmi2.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {                System.exit(0);            }        });                //添加textarea        jta = new JTextArea();        jsc = new JScrollPane(jta);        //添加combobox        fileCombo = new JComboBox();        fileCombo.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e) {                try {                    loadFile((String)fileCombo.getSelectedItem());                } catch (Exception e1) {                    e1.printStackTrace();                }            }                    });                this.add(jsc,BorderLayout.CENTER);        this.add(fileCombo,BorderLayout.SOUTH);    }        public void scannerFile() throws IOException{        //先将combox清空        fileCombo.removeAllItems();        ZipInputStream zis = new ZipInputStream(new FileInputStream(zipname));        ZipEntry ze ;         while((ze=zis.getNextEntry())!=null){            fileCombo.addItem(ze.getName());            zis.closeEntry();        }        zis.close();    }        public void loadFile(String filename) throws Exception{        //先将显示区域清空        jta.setText("");        ZipInputStream zis = new ZipInputStream(new FileInputStream(zipname));        ZipEntry ze;        while((ze=zis.getNextEntry())!=null){            System.out.println(ze.getName()+"---"+filename);            if(ze.getName().equals(filename)){                Scanner in = new Scanner(zis);                while(in.hasNextLine()){                    String s = in.nextLine();                    jta.append(s);                    jta.append("\n");                }            }            zis.closeEntry();        }        zis.close();            }        private String zipname;    private JTextArea jta;    private JScrollPane jsc;    private JComboBox fileCombo;    } 


代码可以执行, loadFile方法报java.lang.IllegalArgumentException,查了一下有的说是线程问题,有的地方说是参数问题,请大家帮我分析一下,异常原因。

[解决办法]
我怀疑你打开的不是标准的zip文件吧。
[解决办法]
Java code
public static File zipFile(String zipName, File[] files) {      File file = new File(zipName);      try {         ZipOutputStream out = new ZipOutputStream(file);         for(int i = 0; i < files.length; i++) {            if(files[i] == null) {               continue;            }            FileInputStream in = new FileInputStream(files[i]);            ZipEntry entry = new ZipEntry(files[i].getName().replaceAll("\\[.+\\]", ""));            out.putNextEntry(entry);            int len = 0;            byte[] bytes = new byte[256];            while((len = in.read(bytes, 0, bytes.length)) != -1) {               out.write(bytes, 0, len);            }            out.closeEntry();            in.close();         }         out.flush();         out.close();      }      catch(Exception e) {         e.printStackTrace();      }      return file;   } 

读书人网 >J2SE开发

热点推荐