`

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压缩文件解压缩和文件的压缩

    在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。

    解压缩加密工具类SSSS

    本文将详细讨论“解压缩加密工具类 SSSS”,它是一款集成了解压缩与加密功能的软件/插件,旨在为用户提供高效且安全的数据管理方案。 首先,我们要理解解压缩工具的作用。解压缩工具通常用于处理压缩文件,如ZIP、...

    ZipUtils--压缩、解压缩

    用户可以通过解压缩软件或编程接口(如ZipUtils)来完成这个过程。 ### 2. ZipUtils功能 ZipUtils作为一个Java库,提供了以下核心功能: - **文件/文件夹压缩**:将单个文件或整个目录结构压缩成.zip文件。 - **...

    Java文字转语音_完整版本

    解压缩后,会得到一个动态链接库文件,例如jacob-1.19-x64.dll。根据你的操作系统是64位还是32位,你需要选择合适的dll文件。然后,将这个dll文件拷贝到Java的安装目录下的bin文件夹,通常是JAVA_HOME/bin,或者是...

    java 反编译工具(GUI版)

    总之,Java反编译工具是开发者和逆向工程师的有力助手,它可以帮助我们查看字节码背后的源代码,理解未知库的功能,或者在丢失源代码时恢复项目。GUI版的工具通过提供直观的操作界面,使得这个过程更加友好和高效。

    JAVA 3D 魔方源代码

    【JAVA 3D 魔方源代码】是基于Java编程语言实现的三维魔方模拟程序,它允许用户在虚拟环境中旋转、操作魔方,体验3D视角下的解谜过程。这个项目对于学习Java图形界面设计、3D建模以及算法实现具有很高的实践价值。 ...

    java卸载工具 jdk卸载工具 官方卸载工具 干净

    用户只需解压缩下载的压缩包,找到这个文件,双击运行即可开始卸载过程。在使用前,确保已备份好重要的个人数据,因为这个工具可能会删除与JDK相关的所有数据。 在使用Java卸载工具时,需要注意以下几点: 1. **...

    jd-gui,简单轻量的java反编译工具

    首先,从官方仓库或第三方网站下载jd-gui的对应平台版本(如jd-gui-0.3.6.windows),解压缩后找到jd-gui.exe或相应平台的可执行文件。然后,直接打开jd-gui,通过菜单栏的“File” -&gt; “Open Class...”或者直接...

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

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

    java 编译工具 jad

    在使用JAD时,首先你需要下载并解压缩包含jd-gui.exe的文件包。这个文件通常是一个ZIP格式的压缩包,解压后会得到jd-gui.exe及其他必要的支持文件。jd-gui.exe是Java应用程序,可以在Windows系统上直接运行,无需...

    免费java反编译工具

    这意味着这个工具是绿色版的,不需要经过复杂的安装步骤,只需解压缩文件后就可以直接运行。此外,它的用户友好性体现在可以通过简单的拖放操作来处理.class文件,大大简化了反编译过程。 在Java反编译工具的世界里...

    java反编译工具免安装

    2. 解压缩到任意目录,无需安装。 3. 找到需要反编译的.class文件。 4. 启动JD-GUI应用程序。 5. 使用“打开文件”功能选择.class文件。 6. JD-GUI将显示反编译出的源代码。 值得注意的是,反编译的结果可能并不...

    绿色java反编译器

    在实际操作中,首先需要将jd-gui.exe解压缩到一个文件夹,然后双击运行。在JD-GUI界面中,选择“File”菜单的“Open File”或“Open Class”,导入你要反编译的.jar或.class文件。一旦加载完成,源代码将在右侧的...

    Java反编译工具(jd-gui).zip

    1. 首先,下载jd-gui的.zip文件并解压缩。 2. 在解压后的文件夹中找到jd-gui.exe文件,双击启动。 3. 当jd-gui窗口打开后,你可以直接将要反编译的.class文件拖放到窗口内,或者通过菜单栏的“File” -&gt; “Open File...

    PersonalJava开发包(pjee3.1)

    `font.properties.zh.zip`是针对中文环境的字体配置文件,解压缩后可以为PersonalJava提供中文显示的支持。在开发面向中文用户的Java应用时,这个文件的正确配置能够确保程序界面和提示信息能够正确地显示汉字,提升...

    jude java建模工具软件

    在解压缩提供的文件后,我们有三个主要文件: - **jude.exe**:这是Jude的主执行文件,双击即可启动软件。 - **Readme-说明.htm**:这是一个HTML格式的帮助文档,包含了详细的使用说明和常见问题解答,建议在初次...

    逆向助手反编译Android.apk

    1. **提取APK**: 使用解压缩工具打开APK文件,获取其中的.dex、.xml和其他资源文件。 2. ** Dex转Java**: 使用dex2jar将.dex文件转换为可反编译的.jar文件。 3. **反编译Java**: 使用Java反编译器将.jar文件转换为...

    java反编译工具(内附安装流程)

    2. **解压JAD**: 如果你下载的是压缩包,使用解压缩工具将其解压到你希望存放的目录。在这个例子中,我们已经有一个名为jad.exe的可执行文件,这意味着它可能已经是一个解压后的版本。 3. **运行JAD**: 在Windows...

Global site tag (gtag.js) - Google Analytics