Java 解压缩助手

我使用Java swing做了一个zip解压缩助手,界面如下:


使用的依赖包: 

 为什么不用java 自带的ZipUtil呢?因为 没有乱码问题.

技术问题

一,如何使窗口居中?

Java代码  

  1. Dimension   screensize   =   Toolkit.getDefaultToolkit().getScreenSize();       
  2.      setSize(600, 280);       
  3.      Dimension   framesize   =   getSize();       
  4.      int   x   =   (int)screensize.getWidth()/2   -   (int)framesize.getWidth()/2;       
  5.      int   y   =   (int)screensize.getHeight()/2   -   (int)framesize.getHeight()/2;       
  6.      setLocation(x,y);     

 

 

 

二,增加助记键

效果:按Alt+C 时触发压缩按钮的点击事件,按Alt+D 触发解压按钮的单击事件

 

 

 三,全局快捷键

Java代码  

  1. /*** 
  2.      * 设置全局快捷键,按Alt+r ,则命令输入框自动聚焦 
  3.      */  
  4.     private void globalShortcutKeys(){  
  5.         //Add global shortcuts  
  6.         Toolkit toolkit = Toolkit.getDefaultToolkit();  
  7.         // 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.  
  8.         toolkit.addAWTEventListener(  
  9.                 new java.awt.event.AWTEventListener() {  
  10.                       
  11.   
  12.                     @Override  
  13.                     public void eventDispatched(AWTEvent event) {  
  14.                         if (event.getClass() == KeyEvent.class) {  
  15.                             KeyEvent kE = ((KeyEvent) event);  
  16.                             // 处理按键事件 Ctrl+Enter  
  17.                             if ((kE.getKeyCode() == KeyEvent.VK_R)  
  18.                                     && (((InputEvent) event)  
  19.                                             .isAltDown())&& kE.getID() == KeyEvent.KEY_PRESSED) {  
  20.                                 System.out.println("Alt+r");  
  21.                                 shScriptTF.requestFocus();  
  22.                             } }  
  23.                           
  24.                     }  
  25.                 }, java.awt.AWTEvent.KEY_EVENT_MASK);  
  26.   
  27.     }  

 

 

四,解压核心代码

Java代码  

  1. /*** 
  2.      * 解压zip 
  3.      *  
  4.      * @param zipFile 
  5.      * @param decompressLoc 
  6.      *            :解压之后的文件所在目录 
  7.      * @throws ArchiveException 
  8.      * @throws IOException 
  9.      */  
  10.     public static boolean deCompressRecursion(String zipFile,  
  11.             File decompressLoc, String charSet) throws ArchiveException,  
  12.             IOException {  
  13.         FileInputStream fin = new FileInputStream(zipFile);  
  14.         ArchiveInputStream archIns = new ArchiveStreamFactory()  
  15.                 .createArchiveInputStream(ArchiveStreamFactory.ZIP, fin);  
  16.         ZipArchiveInputStream zipIn = (ZipArchiveInputStream) archIns;  
  17.         boolean isSuccess = deCompressRecursion(zipIn, decompressLoc, charSet);  
  18.         zipIn.close();  
  19.         return isSuccess;  
  20.     }  
  21. /*** 
  22.      * 递归解压缩. 
  23.      *  
  24.      * @param zipIn 
  25.      * @param decompressLoc 
  26.      * @return 
  27.      * @throws IOException 
  28.      */  
  29.     private static boolean deCompressRecursion(ZipArchiveInputStream zipIn,  
  30.             File decompressLoc, String charset) throws IOException {  
  31.         ZipArchiveEntry zipEntry;  
  32.         if (ValueWidget.isNullOrEmpty(charset)) {  
  33.             charset = SystemHWUtil.CHARSET_UTF;  
  34.         }  
  35.         while (!ValueWidget.isNullOrEmpty(zipEntry = zipIn.getNextZipEntry())) {  
  36.             byte[] rawName = zipEntry.getRawName();  
  37.             String fileName = new String(rawName, charset);  
  38.             // System.out.println(fileName);  
  39.             if (zipEntry.isDirectory()) {// 是目录  
  40.                 File newFolder = new File(decompressLoc, fileName);// 若子目录不存在,则创建之  
  41.                 if(isPrint)  
  42.                 System.out.println(newFolder.getAbsolutePath());  
  43.                 if (!newFolder.exists()) {  
  44.                     newFolder.mkdir();  
  45.                 }  
  46.                 // deCompressRecursion(zipIn, decompressLoc,charset);  
  47.             } else {// 是普通文件  
  48.                 File singFile = new File(decompressLoc, fileName);  
  49.                 if(isPrint)  
  50.                 System.out.println(singFile.getAbsolutePath());  
  51.                 if (singFile.exists()) {// 若解压后的文件已经存在,则直接退出  
  52.                     GUIUtil23.warningDialog("File \""  
  53.                             + singFile.getAbsolutePath() + "\" does  exist.");  
  54.                     return false;  
  55.                 }  
  56.                 /** 
  57.                  * 以下四行代码是后来添加的,为了解决父目录不存在的问题 
  58.                  */  
  59.                 File fatherFolder = singFile.getParentFile();  
  60.                 if (!fatherFolder.exists()) {  
  61.                     fatherFolder.mkdirs();  
  62.                 }  
  63.                 FileUtils.writeIn2Output(zipIn, new FileOutputStream(singFile),  
  64.                         true, false);  
  65.             }  
  66.         }  
  67.         return true;  
  68.     }  

 

五,压缩核心代码

Java代码  

  1. /*** 
  2.      * 压缩文件. 
  3.      *  
  4.      * @param zipFile 
  5.      * @param folderPaths 
  6.      * @return 
  7.      * @throws ArchiveException 
  8.      * @throws IOException 
  9.      */  
  10.     public static boolean compressZipRecursion(String zipFile,  
  11.             String folderPaths) throws ArchiveException, IOException {  
  12.         FileOutputStream fou = new FileOutputStream(zipFile);  
  13.         ArchiveOutputStream archOuts = new ArchiveStreamFactory()  
  14.                 .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);  
  15.         if (archOuts instanceof ZipArchiveOutputStream) {  
  16.             ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts;  
  17.             List<ZipArchiveEntry> zipEntrys = getZipFileListRecursion(new File(  
  18.                     folderPaths), null);  
  19.             for (int i = 0; i < zipEntrys.size(); i++) {  
  20.                 ZipArchiveEntry zipEntry2 = zipEntrys.get(i);  
  21.                 zipOut.putArchiveEntry(zipEntry2);  
  22.                 File file = new File(folderPaths, zipEntry2.getName());  
  23.                 if (!file.exists()) {  
  24.                     return false;  
  25.                 }  
  26.                 if (!file.isDirectory()) {  
  27.                     FileInputStream fin = new FileInputStream(file);  
  28.                     // 不要关闭zipOut,关闭之前要执行closeArchiveEntry()  
  29.                     FileUtils.writeIn2Output(fin, zipOut, false, true);  
  30.                 }  
  31.             }  
  32.             closeZip(zipOut, true);  
  33.   
  34.         }  
  35.         return true;  
  36.     }  
时间: 2024-10-03 08:59:00

Java 解压缩助手的相关文章

Java解压缩zip - 解压缩多个文件或文件夹实例_java

Java解压缩zip - 多个文件(包括文件夹),具体如下: 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压. 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面... ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls")); 测试文件目录结构: 测试的压缩内容:English文件夹和同级的两个excel文件 File[]

java zip解压缩

Java 中如何进行zip包的解压缩呢? 有两种方式: (1)使用jdk 自带的zip工具 (2)使用apache旗下的commons-compress 我下面要讲解的zip解压缩助手使用的是apache旗下的commons-compress. 工具运行界面如下:  核心代码: 解压: Java代码   /***       * 解压zip       *        * @param zipFile       * @param decompressLoc       *          

java用Zip进行多文件保存

提供了Zip支持的Java 1.1库显得更加全面.利用它可以方便地保存多个文件.甚至有一个独立的类来简化对Zip文件的读操作.这个库采采用的是标准Zip格式,所以能与当前因特网上使用的大量压缩.解压工具很好地协作.下面这个例子采取了与前例相同的形式,但能根据我们需要控制任意数量的命令行参数.除此之外,它展示了如何用Checksum类来计算和校验文件的"校验和"(Checksum).可选用两种类型的Checksum:Adler32(速度要快一些)和CRC32(慢一些,但更准确).   /

Java创建ZIP压缩文件的方法_java

本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

java调用Runtime.getRuntime().exec执行解压RAR压缩包时只能在系统刚启动时解压一次,应该怎么解决?

问题描述 Processp=Runtime.getRuntime().exec(unrarCmd);iState=p.waitFor();核心语句就是上面两句,语句都正确,但只有在Tamcat重启时才能正常解压一次,很是郁闷,不知道怎么解决,如有高手赐教,不胜感激. 解决方案 解决方案二:该回复于2010-01-30 22:55:22被版主删除解决方案三:路过,两行代码看不出什么问题,整个流程贴出来还差不多解决方案四:....代码给的太少了,给你个能用的解压缩例子.java解压缩文件import

Java解压zip文件的关键代码_java

废话不多说了,给大家贴关键代码了,具体代码如下所示: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import o

学习JavaFX Script,第二部分:使用RMI进行远程通信

       原文地址: http://java.sun.com/developer/technicalArticles/scripting/javafxpart2/        本系列的第一部分向Java程序员介绍了JavaFX脚本编程语言的语法及语义.本文在您对JavaFX脚本认知的基础上进行描述,调用Java平台的远程方法调用(Remote Method Invocation,Java RMI)类库,使JavaFX图形用户界面(GUI)可以远程通信.在JavaFX脚本中使用RMI是非常直

JavaScript FAQ (十九)——文件访问

十六.文件访问(File Access)   1.读取文件(Reading a File) Q:如何将文件读取到JavaScript变量中? A:根据脚本运行的环境和文件的位置,你可以有以下选项: XMLHttpRequest 对象(通过URL读取网站上可用的文件) FileSystemObject(如果你在一个被信任的环境下使用Windows Scripting Hosting或者IE) 一个读取文件或者URL的"助手"Java applet  关于前两个选项的讨论,请点击上面的超链

利用Java实现zip压缩/解压缩

压缩 利用Java实现zip压缩/解压缩(作者: 2000年07月06日 13:30) 由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节 省服务器的外存空间. Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩.网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry.ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法. zip压缩文件结构:一个zip文件由多个entry组