📄 testzip.java
字号:
import java.awt.FileDialog;import java.awt.Frame;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class TestZip extends Frame implements ActionListener { TextArea textarea; //显示数据文件的多行文本 TextField infotip; //显示数据文件未压缩大小以及压缩大小单行文本显示域 String doc; //存储随机生成的数据 long doczipsize = 0;//压缩数据文件的大小 public TestZip() { //生成菜单 MenuBar menubar = new MenuBar(); setMenuBar(menubar); Menu file = new Menu("File", true); menubar.add(file); MenuItem neww = new MenuItem("New"); neww.addActionListener(this); file.add(neww); MenuItem open = new MenuItem("Open"); open.addActionListener(this); file.add(open); MenuItem save = new MenuItem("Save"); save.addActionListener(this); file.add(save); MenuItem exit = new MenuItem("Exit"); exit.addActionListener(this); file.add(exit); //随机生成的数据文件的多行文本显示域 add("Center", textarea = new TextArea()); //提示文本原始大小、压缩大小的单行文本显示域 add("South", infotip = new TextField()); //关闭当前的窗口,释放系统资源 this.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public static void main(String args[]) { TestZip ok = new TestZip(); ok.setTitle("zip sample"); ok.setSize(600, 300); //ok.show(); ok.setVisible(true); } private void randomData() { //随机生成50个double数据,并放在doc字符串变量中。 doc = ""; for (int i = 1; i < 51; i++) { double rdm = Math.random() * 10; doc = doc + new Double(rdm).toString(); if (i % 5 == 0) doc = doc + "\n"; else doc = doc + " "; } doczipsize = 0; showTextandInfo(); } private void openFile() { //打开zip文件,将文件内容读入doc字符串变量中。 FileDialog dlg = new FileDialog(this, "Open", FileDialog.LOAD); //dlg.show();//已经不赞成使用 dlg.setVisible(true); //取得文件目录、文件名 String filename = dlg.getDirectory() + dlg.getFile(); try { //创建一个文件实例 File f = new File(filename); if (!f.exists()) return; //文件不存在,则返回 //用文件输入流构建ZIP压缩输入流 ZipInputStream zipis = new ZipInputStream(new FileInputStream(f)); //Reads the next ZIP file entry and //positions the stream at the beginning of the entry data. //从后缀为.zip文件的入口读取文件,并决定入口数据流数据的位置。 zipis.getNextEntry(); //将输入流定位在当前entry数据项位置 DataInputStream dis = new DataInputStream(zipis); //用ZIP输入流构建DataInputStream doc = dis.readUTF();//读取文件内容 dis.close();//关闭文件 doczipsize = f.length();//获取ZIP文件长度 showTextandInfo();//显示数据 } catch (IOException ioe) { System.out.println(ioe); } } private void saveFile() { //打开zip文件,将doc字符串变量写入zip文件中。 FileDialog dlg = new FileDialog(this, "Save", FileDialog.SAVE); //dlg.show(); dlg.setVisible(true); String filename = dlg.getDirectory() + dlg.getFile(); try { //检查文件的后缀是否为“zip”,如果不是以“.zip”结尾则自动增加 if(! filename.endsWith(".zip")){ filename += ".zip"; } File f = new File(filename); // 创建一个文件实例 //检查文件是否存在,如果不存在就重新创建一个新的文件。 if (!f.exists()) f.createNewFile(); //用文件输出流构建ZIP压缩输出流 ZipOutputStream zipos = new ZipOutputStream(new FileOutputStream(f)); zipos.setMethod(ZipOutputStream.DEFLATED);//设置压缩方法 zipos.putNextEntry(new ZipEntry("zip")); //生成一个ZIP entry,写入文件输出流中,并将输出流定位于entry起始处。 DataOutputStream os = new DataOutputStream(zipos); //用ZIP输出流构建DataOutputStream; os.writeUTF(doc);//将随机生成的数据写入文件中 os.close();//关闭数据流 doczipsize = f.length(); //获取压缩文件的长度 showTextandInfo();//显示数据 } catch (IOException ioe) { System.out.println(ioe); } } private void showTextandInfo() { //显示数据文件和压缩信息 textarea.replaceRange(doc, 0, textarea.getText().length()); infotip.setText("uncompressed size: " + doc.length() + "compressed size: " + doczipsize); } public void actionPerformed(ActionEvent e) { String arg = e.getActionCommand(); if ("New".equals(arg)) randomData(); else if ("Open".equals(arg)) openFile(); else if ("Save".equals(arg)) saveFile(); else if ("Exit".equals(arg)) { dispose();//关闭窗口 System.exit(0);//关闭程序 } else { System.out.println("no this command!"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -