我使用Java swing做了一个zip解压缩助手,界面如下:
使用的依赖包:
为什么不用java 自带的ZipUtil呢?因为 没有乱码问题.
技术问题
一,如何使窗口居中?
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); setSize(600, 280); Dimension framesize = getSize(); int x = (int)screensize.getWidth()/2 - (int)framesize.getWidth()/2; int y = (int)screensize.getHeight()/2 - (int)framesize.getHeight()/2; setLocation(x,y);
二,增加助记键
效果:按Alt+C 时触发压缩按钮的点击事件,按Alt+D 触发解压按钮的单击事件
三,全局快捷键
/*** * 设置全局快捷键,按Alt+r ,则命令输入框自动聚焦 */ private void globalShortcutKeys(){ //Add global shortcuts Toolkit toolkit = Toolkit.getDefaultToolkit(); // 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理. toolkit.addAWTEventListener( new java.awt.event.AWTEventListener() { @Override public void eventDispatched(AWTEvent event) { if (event.getClass() == KeyEvent.class) { KeyEvent kE = ((KeyEvent) event); // 处理按键事件 Ctrl+Enter if ((kE.getKeyCode() == KeyEvent.VK_R) && (((InputEvent) event) .isAltDown())&& kE.getID() == KeyEvent.KEY_PRESSED) { System.out.println("Alt+r"); shScriptTF.requestFocus(); } } } }, java.awt.AWTEvent.KEY_EVENT_MASK); }
四,解压核心代码
/*** * 解压zip * * @param zipFile * @param decompressLoc * :解压之后的文件所在目录 * @throws ArchiveException * @throws IOException */ public static boolean deCompressRecursion(String zipFile, File decompressLoc, String charSet) throws ArchiveException, IOException { FileInputStream fin = new FileInputStream(zipFile); ArchiveInputStream archIns = new ArchiveStreamFactory() .createArchiveInputStream(ArchiveStreamFactory.ZIP, fin); ZipArchiveInputStream zipIn = (ZipArchiveInputStream) archIns; boolean isSuccess = deCompressRecursion(zipIn, decompressLoc, charSet); zipIn.close(); return isSuccess; } /*** * 递归解压缩. * * @param zipIn * @param decompressLoc * @return * @throws IOException */ private static boolean deCompressRecursion(ZipArchiveInputStream zipIn, File decompressLoc, String charset) throws IOException { ZipArchiveEntry zipEntry; if (ValueWidget.isNullOrEmpty(charset)) { charset = SystemHWUtil.CHARSET_UTF; } while (!ValueWidget.isNullOrEmpty(zipEntry = zipIn.getNextZipEntry())) { byte[] rawName = zipEntry.getRawName(); String fileName = new String(rawName, charset); // System.out.println(fileName); if (zipEntry.isDirectory()) {// 是目录 File newFolder = new File(decompressLoc, fileName);// 若子目录不存在,则创建之 if(isPrint) System.out.println(newFolder.getAbsolutePath()); if (!newFolder.exists()) { newFolder.mkdir(); } // deCompressRecursion(zipIn, decompressLoc,charset); } else {// 是普通文件 File singFile = new File(decompressLoc, fileName); if(isPrint) System.out.println(singFile.getAbsolutePath()); if (singFile.exists()) {// 若解压后的文件已经存在,则直接退出 GUIUtil23.warningDialog("File \"" + singFile.getAbsolutePath() + "\" does exist."); return false; } /** * 以下四行代码是后来添加的,为了解决父目录不存在的问题 */ File fatherFolder = singFile.getParentFile(); if (!fatherFolder.exists()) { fatherFolder.mkdirs(); } FileUtils.writeIn2Output(zipIn, new FileOutputStream(singFile), true, false); } } return true; }
五,压缩核心代码
/*** * 压缩文件. * * @param zipFile * @param folderPaths * @return * @throws ArchiveException * @throws IOException */ public static boolean compressZipRecursion(String zipFile, String folderPaths) throws ArchiveException, IOException { FileOutputStream fou = new FileOutputStream(zipFile); ArchiveOutputStream archOuts = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou); if (archOuts instanceof ZipArchiveOutputStream) { ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts; List<ZipArchiveEntry> zipEntrys = getZipFileListRecursion(new File( folderPaths), null); for (int i = 0; i < zipEntrys.size(); i++) { ZipArchiveEntry zipEntry2 = zipEntrys.get(i); zipOut.putArchiveEntry(zipEntry2); File file = new File(folderPaths, zipEntry2.getName()); if (!file.exists()) { return false; } if (!file.isDirectory()) { FileInputStream fin = new FileInputStream(file); // 不要关闭zipOut,关闭之前要执行closeArchiveEntry() FileUtils.writeIn2Output(fin, zipOut, false, true); } } closeZip(zipOut, true); } return true; }
源码zip_mgmt.zip及依赖的jar包见附件
参考:http://hw1287789687.iteye.com/blog/2050132
相关推荐
这是使用java 编写的一个zip解压缩工具,既可以解压缩zip包,也可以把目录打包成为zip压缩包. 源代码下载地址: http://pan.baidu.com/s/1c0EJrlm
解压缩到任意目录。双击start.bat启动点击“开始游戏”适当调节运行时间系数如果连接手机错误,请先使用360手机助手连接一次手机实现原理通过adb连接手机,通过adb命令截屏抓取游戏页面计算出屏幕中黑棋到目标块的...
中文名: VC助手 10.6.1842英文名: Visual Assist X 10.6.1842资源格式: 压缩包版本: 10.6.1842发行时间: 2011年02月03日制作发行: ...VA_X_Setup1842.zip压缩安装后,拷贝va_x.dll到安装目录覆盖同名文件即可破解.
解压缩到任意目录 双击start.bat启动 点击“开始游戏” 适当调节运行时间系数 如果连接手机错误,请先使用360手机助手连接一次手机 实现原理 通过adb连接手机 通过adb命令截屏抓取游戏页面 计算出屏幕中黑棋到目标块...
在被控机器上,先解压缩mstsc-proxy-simple.zip,然后双击运行文件夹中的mstsc-proxy.exe,一会儿会出现如下界面(如果按照了安全卫士等软件,可能要等10几秒)。 待界面上的连接码显示为具体的ipport后,记录下连接...
Visual Assist X 10.7.1916.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
Visual Assist X 10.6.1859.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
Visual Assist X 10.6.1862.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
Visual Assist X 10.7.1901.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
Visual Assist X 10.7.1906.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
Visual Assist X 10.7.1916.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!
鉴赏家第n次修正后灵感枯竭的教师的理想助手。... 要启动 Appreciator:下载并解压缩 zip 存档,然后双击位于“dist”文件夹中的“Appreciator.jar”文件。 警告:确保您的计算机上安装了 Java 并且它是最新的 ( )
并解压缩存储库,或在计算机上运行命令git clone https://github.com/maniksejwal/Memory-Assistant.git 。 在Android Studio中,提取下载的zip或从git导入为新项目后,将项目作为现有android studio项目打开。 ...
PokerAssist得出了赢得德州扑克扑克游戏的可能性。... 安装:该软件在运行之前需要安装Python v2.5 +和PyQT4.X,然后在解压缩源代码后立即启动pokerassistant.py。 下一版本将迁移到Java技术,以提供开发便利。
使用使用已有的包下载以后解压缩,配置 qiniu.properties 中的参数;使用 java -jar 命令运行 jar 包,浏览器访问修改源码将项目导入 idea;修改 core.model.QiNiuAccount 类执行 gradle - build 打包出 jar 包即可...
矿山机器人Minebot是Minecraft的模组,可控制... 克隆/下载此仓库运行./release.sh 将该ZIP文件解压缩到您的minecraft mods目录中如果在构建过程中遇到异常,请尝试在minebot目录中运行此文件: ./gradlew --no-daemon
JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形...
易语言5.1 相对于易语言5.0更新说明: 支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。 使用说明如下:函数声明和调用...