zipInputStream 应用

来源:互联网 发布:mac win7激活密钥 编辑:程序博客网 时间:2024/05/06 13:27
package org.chapter.io;


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;
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;
import javax.swing.SwingWorker;


public class ZipTest {
public static void main(String[] args) {
new ZipFrame();
}
}


class ZipFrame extends JFrame {


private JComboBox fileCombo;
private JTextArea fileText;
private String zipname;


public ZipFrame() {
this.setTitle("ZIP");
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds((dim.width - 500) / 2, (dim.height - 500) / 2, 500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("File");
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new ActionListener() {


@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
int r = chooser.showOpenDialog(ZipFrame.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);
}
});
menubar.add(menu);
setJMenuBar(menubar);

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

@Override
public void actionPerformed(ActionEvent e) {

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 {


ZipInputStream zip = new ZipInputStream(new FileInputStream(
zipname));
// 在读取zip留的时候这个比不可少
ZipEntry entry;
while ((entry = zip.getNextEntry()) != null) {
publish(entry.getName());
// 此方法是读取下一页,在当前项结束
zip.closeEntry();
}
zip.close();
return null;
}


@Override
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 {


try {
ZipInputStream zip = new ZipInputStream(
new FileInputStream(zipname));
ZipEntry entry;
while ((entry = zip.getNextEntry()) != null) {
if (entry.getName().equals(name)) {
Scanner in = new Scanner(zip);
while (in.hasNextLine()) {
fileText.append(in.nextLine());
fileText.append("\n");
}
}
zip.closeEntry();
}


zip.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return null;
}


@Override
protected void done() {
fileCombo.setEnabled(true);
}
}.execute();
}

}



----------------------------------------------效果图---------------------------


原创粉丝点击