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