`

Java 解压缩助手

    博客分类:
  • Java
阅读更多

我使用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

  • 大小: 31.9 KB
  • 大小: 2.5 KB
  • 大小: 63.8 KB
  • 大小: 28.1 KB
  • 大小: 16.2 KB
  • 大小: 40.8 KB
2
2
分享到:
评论

相关推荐

    java zip解压缩助手

    这是使用java 编写的一个zip解压缩工具,既可以解压缩zip包,也可以把目录打包成为zip压缩包. 源代码下载地址: http://pan.baidu.com/s/1c0EJrlm

    自动玩微信跳一跳游戏Java版

    解压缩到任意目录。双击start.bat启动点击“开始游戏”适当调节运行时间系数如果连接手机错误,请先使用360手机助手连接一次手机实现原理通过adb连接手机,通过adb命令截屏抓取游戏页面计算出屏幕中黑棋到目标块的...

    VC编程助手

    中文名: VC助手 10.6.1842英文名: Visual Assist X 10.6.1842资源格式: 压缩包版本: 10.6.1842发行时间: 2011年02月03日制作发行: ...VA_X_Setup1842.zip压缩安装后,拷贝va_x.dll到安装目录覆盖同名文件即可破解.

    AutoPlayWechatJumpGame:自动玩微信跳一跳游戏Java版,仅供技术研究使用,请勿用于非法用途,否则后果作者概不负责

    解压缩到任意目录 双击start.bat启动 点击“开始游戏” 适当调节运行时间系数 如果连接手机错误,请先使用360手机助手连接一次手机 实现原理 通过adb连接手机 通过adb命令截屏抓取游戏页面 计算出屏幕中黑棋到目标块...

    java7源码-mstsc-proxy:远程连接办公室电脑

    在被控机器上,先解压缩mstsc-proxy-simple.zip,然后双击运行文件夹中的mstsc-proxy.exe,一会儿会出现如下界面(如果按照了安全卫士等软件,可能要等10几秒)。 待界面上的连接码显示为具体的ipport后,记录下连接...

    Visual Assist X 10.8.2043.0 绿色注册破解版

    Visual Assist X 10.7.1916.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    Visual Assist X 10.6.1859.0 绿色注册破解版 2011.10.02

    Visual Assist X 10.6.1859.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    Visual Assist X 10.6.1862.0 绿色注册破解版

    Visual Assist X 10.6.1862.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    Visual Assist X 10.7.1901.0 绿色注册破解版

    Visual Assist X 10.7.1901.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    Visual Assist X 10.7.1906.0 绿色注册破解版

    Visual Assist X 10.7.1906.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    Visual Assist X 10.7.1916.0 绿色注册破解版

    Visual Assist X 10.7.1916.0 , VC助手,很好很强大! ... 与之前的版本相比,有了长足的改进。 ...直接解压缩到一个文件夹里就能使用,双击Reg.cmd即可完成绿化处理,双击UnReg.cmd即可完成卸载处理!

    appreciator:第n次校对后灵感枯竭的老师的理想助手

    鉴赏家第n次修正后灵感枯竭的教师的理想助手。... 要启动 Appreciator:下载并解压缩 zip 存档,然后双击位于“dist”文件夹中的“Appreciator.jar”文件。 警告:确保您的计算机上安装了 Java 并且它是最新的 ( )

    记忆助手:记忆运动员的主要项目

    并解压缩存储库,或在计算机上运行命令git clone https://github.com/maniksejwal/Memory-Assistant.git 。 在Android Studio中,提取下载的zip或从git导入为新项目后,将项目作为现有android studio项目打开。 ...

    PokerAssist:扑克游戏助手获得赢得一手牌的可能性。-开源

    PokerAssist得出了赢得德州扑克扑克游戏的可能性。... 安装:该软件在运行之前需要安装Python v2.5 +和PyQT4.X,然后在解压缩源代码后立即启动pokerassistant.py。 下一版本将迁移到Java技术,以提供开发便利。

    qiniuUpload:七牛云上传助手

    使用使用已有的包下载以后解压缩,配置 qiniu.properties 中的参数;使用 java -jar 命令运行 jar 包,浏览器访问修改源码将项目导入 idea;修改 core.model.QiNiuAccount 类执行 gradle - build 打包出 jar 包即可...

    minebot:Minebot

    矿山机器人Minebot是Minecraft的模组,可控制... 克隆/下载此仓库运行./release.sh 将该ZIP文件解压缩到您的minecraft mods目录中如果在构建过程中遇到异常,请尝试在minebot目录中运行此文件: ./gradlew --no-daemon

    网管教程 从入门到精通软件篇.txt

    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两种函数调用约定。  使用说明如下:函数声明和调用...

Global site tag (gtag.js) - Google Analytics