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;
}
}