?? gzipdemo.java
字號:
import java.io.*;
import java.awt.event.*;
import java.util.zip.*;
import javax.swing.*;
//用GZIP壓縮解壓文件
public class GZipDemo extends JFrame{
JFileChooser fileChooser; //文件選擇器
JTextField jtfSourceFile; //源文件路徑
JTextField jtfTargetFile; //目標文件路徑
JButton selectFile1; //選擇文件按鈕
JButton selectFile2;
JButton jbZip; //
JButton jbUnZip;
public GZipDemo(){
super("用GZIP壓縮解壓文件"); //調用父類構造函數
fileChooser=new JFileChooser(); //實例化文件選擇器
jtfSourceFile=new JTextField(16); //實例化組件
jtfTargetFile=new JTextField(16);
selectFile1=new JButton("選擇");
selectFile2=new JButton("選擇");
jbZip=new JButton("壓縮");
jbUnZip=new JButton("解壓");
Box box=Box.createVerticalBox(); //實例化Box,用于容納組件
JPanel panel=new JPanel();
panel.add(new JLabel("源 文 件")); //增加組件到面板(panel)上
panel.add(jtfSourceFile);
panel.add(selectFile1);
box.add(panel); //增加組件到Box上
panel=new JPanel();
panel.add(new JLabel("目標文件"));
panel.add(jtfTargetFile);
panel.add(selectFile2);
box.add(panel);
panel=new JPanel();
panel.add(jbZip);
panel.add(jbUnZip);
box.add(panel);
getContentPane().add(box); //增加Box到容器上
jbZip.addActionListener(new ActionListener(){ //壓縮按鈕事件處理
public void actionPerformed(ActionEvent event) {
zipFile(jtfSourceFile.getText(),jtfTargetFile.getText()); //調用壓縮文件方法
}
});
jbUnZip.addActionListener(new ActionListener(){ //解壓按鈕事件處理
public void actionPerformed(ActionEvent event) {
unZipFile(jtfSourceFile.getText(),jtfTargetFile.getText()); //調用解壓文件方法
}
});
selectFile1.addActionListener(new SelectFileListener()); //設置選擇文件的事件處理
selectFile2.addActionListener(new SelectFileListener());
setSize(330,150); //設置窗口尺寸
setVisible(true); //設置窗口可視
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關閉窗口時退出程序
}
public void zipFile(String source,String target){ //壓縮文件
try{
FileInputStream fin=new FileInputStream(source); //從源文件得到文件輸入流
FileOutputStream fout=new FileOutputStream(target); //得到目標文件輸出流
GZIPOutputStream gzout=new GZIPOutputStream(fout); //得到壓縮輸出流
byte[] buf=new byte[1024];//設定讀入緩沖區尺寸
int num;
while ((num=fin.read(buf))!=-1){ //如果文件未讀完
gzout.write(buf,0,num); //寫入緩沖數據
}
gzout.close(); //關閉壓縮輸出流
fout.close(); //關閉文件輸出流
fin.close(); //關閉文件輸入流
showMessage("壓縮成功"); //顯示操作信息
}
catch (Exception ex){
ex.printStackTrace(); //打印出錯信息
showMessage("壓縮失敗");
}
}
public void unZipFile(String source,String target){ //解壓文件
try{
FileInputStream fin=new FileInputStream(source); //得以文件輸入流
GZIPInputStream gzin=new GZIPInputStream(fin); //得到壓縮輸入流
FileOutputStream fout=new FileOutputStream(target); //得到文件輸出流
byte[] buf=new byte[1024]; //緩沖區大小
int num;
while ((num=gzin.read(buf,0,buf.length))!=-1) { //如果文件未讀完
fout.write(buf,0,num); //寫入緩沖數據到輸出流
}
gzin.close(); //關閉壓縮輸入流
fout.close(); //關閉文件輸出流
fin.close(); //關閉文件輸入流
showMessage("解壓成功"); //顯示操作信息
}
catch (Exception ex){
ex.printStackTrace(); //打印出錯信息
showMessage("解壓成功");
}
}
class SelectFileListener implements ActionListener { //文件選擇的事件處理
public void actionPerformed(ActionEvent event) {
if (fileChooser.showOpenDialog(GZipDemo.this)==JFileChooser.APPROVE_OPTION){ //彈出文件選擇器,并判斷是否點擊了打開按鈕
String fileName=fileChooser.getSelectedFile().getAbsolutePath(); //得到選擇文件的絕對路徑
if (event.getSource().equals(selectFile1)){ //判斷事件來自于哪個按鈕
jtfSourceFile.setText(fileName); //設置源文件路徑
}
else{
jtfTargetFile.setText(fileName); //設置目標文件路徑
}
}
}
}
private void showMessage(String message){
JOptionPane.showMessageDialog(GZipDemo.this,message); //顯示信息
}
public static void main(String[] args){
new GZipDemo();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -