📄 compressfile.java
字号:
/*
* 创建日期 2008-7-13
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author jiang
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CompressFile extends JFrame implements ActionListener{
private String str1;
private String str2;
private String s1="F:/test.zip";
private String s2="E:/";
private static CompressFile instance = new CompressFile();
private JLabel[] m_label={new JLabel("从"),new JLabel("压缩到"),new JLabel("解压到"),
new JLabel("从")};
private JTextField[] m_textField={new JTextField("",11),new JTextField("",11),
new JTextField("",11),new JTextField("",11)};
private JButton[] b={new JButton("选择"),new JButton("选择"),new JButton("开始压缩"),
new JButton("开始解压")};
private CompressFile() {
super("压缩/解压缩文件");
Container container=getContentPane();
container.setLayout(new FlowLayout(FlowLayout.LEFT));
container.add(m_label[0]);
container.add(m_textField[0]);
container.add(b[0]);
m_textField[1].setText(s1);
m_textField[3].setText(s2);
m_textField[1].setEditable(false);
m_textField[3].setEditable(false);
container.add(m_label[1]);
container.add(m_textField[1]);
container.add(b[2]);
///////////////////////////////////////////
container.add(m_label[3]);
container.add(m_textField[2]);
container.add(b[1]);
container.add(m_label[2]);
container.add(m_textField[3]);
container.add(b[3]);
b[0].addActionListener(this);
b[1].addActionListener(this);
b[2].addActionListener(this);
b[3].addActionListener(this);
setSize(500,150);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource()==b[0])
openFile();
else if(e.getSource()==b[1])
openFile2();
else if(e.getSource()==b[2])
beginCompress();
else if(e.getSource()==b[3])
beginBeCompress();
else {
}
}
private void openFile(){
FileDialog dlg=new FileDialog(this,"选择",FileDialog.LOAD);
dlg.show();
str1=dlg.getDirectory()+dlg.getFile();
m_textField[0].setText(str1);
}
private void openFile2(){
FileDialog dlg=new FileDialog(this,"选择",FileDialog.LOAD);
dlg.show();
str2=dlg.getDirectory()+dlg.getFile();
m_textField[2].setText(str2);
}
private void beginCompress()
{
try {
zip(m_textField[0].getText(), m_textField[1].getText());
JOptionPane.showMessageDialog(null,"压缩完毕!");
} catch (IOException e) {
e.printStackTrace();
}
}
private void beginBeCompress()
{
try {
unzip(m_textField[2].getText(), m_textField[3].getText());
JOptionPane.showMessageDialog(null,"解压完毕!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static CompressFile getInstance() {
return instance;
}
public synchronized void zip(String inputFilename, String zipFilename)
throws IOException {
zip(new File(inputFilename), zipFilename);
}
public synchronized void zip(File inputFile, String zipFilename) throws IOException {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFilename));
try {
zip(inputFile, out, "");
} catch (IOException e) {
throw e;
} finally {
out.close();
}
}
private synchronized void zip(File inputFile, ZipOutputStream out, String base)
throws IOException {
if (inputFile.isDirectory()) {
File[] inputFiles = inputFile.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < inputFiles.length; i++) {
zip(inputFiles[i], out, base + inputFiles[i].getName());
}
} else {
if (base.length() > 0) {
out.putNextEntry(new ZipEntry(base));
} else {
out.putNextEntry(new ZipEntry(inputFile.getName()));
}
FileInputStream in = new FileInputStream(inputFile);
try {
int c;
byte[] by = new byte[BUFFEREDSIZE];
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
} catch (IOException e) {
throw e;
} finally {
in.close();
}
}
}
public synchronized void unzip(String zipFilename, String outputDirectory)
throws IOException {
File outFile = new File(outputDirectory);
if (!outFile.exists()) {
outFile.mkdirs();
}
ZipFile zipFile = new ZipFile(zipFilename);
Enumeration en = zipFile.entries();
ZipEntry zipEntry = null;
while (en.hasMoreElements()) {
zipEntry = (ZipEntry) en.nextElement();
if (zipEntry.isDirectory()) {
// mkdir directory
String dirName = zipEntry.getName();
dirName = dirName.substring(0, dirName.length() - 1);
File f = new File(outFile.getPath() + File.separator + dirName);
f.mkdirs();
} else {
// unzip file
File f = new File(outFile.getPath() + File.separator
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
try {
int c;
byte[] by = new byte[BUFFEREDSIZE];
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
// out.flush();
} catch (IOException e) {
throw e;
} finally {
out.close();
in.close();
}
}
}
}
private static final int BUFFEREDSIZE = 1024;
public static void main(String[] args) {
CompressFile app = new CompressFile();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -