文件操作其实不难,但是在项目中是很常用的,这里分享个解压压缩包的终结代码:zip格式的需要用java.util.zip包,rar格式的需要用com.github.junrar。
话不多说,代码如下:
/** * 解压zip格式的压缩文件到指定位置 * * @param zipFileName * 压缩文件 全路径 * @param dstDirectoryPath * 解压目录 * @throws Exception */ public static boolean unZipFile(String zipFileName, String dstDirectoryPath) throws Exception { // 乱码问题以及文件内容重复问题 System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding")); try { File dstDiretory = new File(dstDirectoryPath); if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹 dstDiretory.mkdirs(); } File f = new File(zipFileName); if ((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } ZipFile zipFile = new ZipFile(zipFileName, Charset.forName("gbk")); // 处理中文文件名乱码的问题 String strPath, gbkPath, strtemp; File tempFile = new File(dstDirectoryPath); strPath = tempFile.getAbsolutePath(); Enumeration<?> e = zipFile.entries(); while (e.hasMoreElements()) { ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath = zipEnt.getName(); // 判断是目录还是文件 如果是文件直接解析和上传 // 如果是目录 创建文件夹 递归去处理文件 if (zipEnt.isDirectory()) { strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { // 读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath = zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; // 建目录 直接处理怕出现重名 覆盖 String strsubdir = gbkPath; for (int i = 0; i < strsubdir.length(); i++) { if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if (!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while ((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据原始rar路径,解压到指定文件夹下. * * @param srcRarPath * 原始rar路径 * @param dstDirectoryPath * 解压到的文件夹 */ public static boolean unRarFile(String srcRarPath, String dstDirectoryPath) { File dstDiretory = new File(dstDirectoryPath); if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹 dstDiretory.mkdirs(); } Archive a = null; File rarFile = null; try { rarFile = new File(srcRarPath); if (!rarFile.exists()) { return false; } else { a = new Archive(rarFile); if (a != null) { // a.getMainHeader().print(); // 打印文件信息. FileHeader fh = a.nextFileHeader(); while (fh != null) { // 防止文件名中文乱码问题的处理 String fileName = fh.getFileNameW().isEmpty() ? fh .getFileNameString() : fh.getFileNameW(); if (fh.isDirectory()) { // 文件夹 File fol = new File(dstDirectoryPath + File.separator + fileName); fol.mkdirs(); } else { // 文件 File out = new File(dstDirectoryPath + File.separator + fileName.trim()); try { if (!out.exists()) { if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录. out.getParentFile().mkdirs(); } out.createNewFile(); } FileOutputStream os = new FileOutputStream(out); a.extractFile(fh, os); os.close(); } catch (Exception ex) { ex.printStackTrace(); } } fh = a.nextFileHeader(); } a.close(); } } return true; } catch (Exception e) { e.printStackTrace(); } return false; }
/** * 删除文件目录及文件 * * @param delFile */ private void deleteFile(File delFile) { // 删除单个文件 if (delFile.exists()) { if (delFile.isFile()) { delFile.delete(); } else if (delFile.isDirectory()) { // 如果是目录 遍历目录下的文件 删除文件后删除目录 File[] files = delFile.listFiles(); for (int i = 0; i < files.length; i++) { deleteFile(files[i]); } delFile.delete();// 删除掉目录 } } } /** * 删除本地目录及文件 * * @param sPath * 绝对路径 */ private void deleteFolder(String sPath) { File file = new File(sPath); // 判断目录或文件是否存在 if (!file.exists()) { // 不存在返回 false return; } else { // 判断是否为文件 deleteFile(file); } }
相关推荐
以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...
在这个特定的压缩包文件中,"PDF2img"是一个基于PDFBox开发的DEMO,它设计用于解决PDF转图片时可能出现的中文乱码问题。 PDFBox是Apache软件基金会的一个开源项目,提供了丰富的API来读取、写入、修改PDF文档。在...
解决java压缩zip文件时的中文乱码问题 实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码...
这个"Java 11 压缩包版 - jdk11.0.12"包含了Java Development Kit的最新稳定版本,允许开发者在Windows操作系统上搭建Java开发环境。下面将详细介绍如何安装、配置以及使用Java 11,同时也会涉及一些相关的重要知识...
### Java实现文件下载并解决中文文件名乱码 在日常的Web开发中,经常会遇到需要让用户下载文件的需求,尤其是在企业级应用中。然而,在实际操作过程中可能会遇到一个常见问题:当文件名包含中文字符时,下载后的...
Java提取压缩包中的文件,文件操作的范畴,操作对象为ZIP格式的压缩文件,将从ZIP中提取出BMP图像文件,要将从压缩包中提取文件,必须先解压压缩包,然后将指定文件拷贝出来,代码中先实现了对zip文件的解压,然后...
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...
Java解压RAR文件,压缩包内包含源码、Jar包、依赖包和示例程序,也可以从http://code.google.com/p/java-unrar/downloads/list这里下载支持密码的unrar项目(包括源码和jar包),其依赖包也很容易搜到。 RAR 密码
如果未指定,则默认使用平台的默认字符集,这可能导致在不同系统上解压时出现乱码。为了避免这种情况,我们可以使用`UTF-8`编码,因为它在大多数情况下都能很好地处理各种字符集。 以下是一个示例代码,演示如何...
《MLDN出品JAVA风暴JAVA学习的终极资料》JAVASE压缩包是一份全面且深入的Java SE(标准版)学习资源集合。这份压缩包显然旨在为Java初学者和进阶者提供一个完整的知识体系,帮助他们在Java编程领域扎实基础,提升...
以下是一些关键知识点,帮助开发者理解和解决Android解压过程中的乱码问题: 1. **编码理解**:在计算机系统中,文本通常由特定的字符编码表示,如ASCII、UTF-8、GBK等。不同编码方式对应不同的字符集,如果处理...
在日本经常使用zip或者lha格式的压缩包,在中文系统下解压时,如果压缩包里的文件是日语名,虽然能正常解压,但是解出的文件会变成乱码。这实际上是日语系统使用Shift-JIS编码,在中文系统下解压时按照GB编码显示...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
**源代码查看神器Source Insight 3.5及中文乱码问题解决方案** Source Insight是一款深受程序员喜爱的源代码查看和编辑工具,它以其强大的代码高亮、语法分析和跳转功能而闻名。然而,在处理含有中文字符的代码时,...
以下是关于解决“解压文件时中文乱码”问题的相关知识点: 1. **编码概念**:编码是将字符转换为二进制数据的过程,以便计算机存储和处理。常见的字符编码标准有ASCII、GBK、GB2312、Big5和Unicode(包括其变体UTF-...
在Linux环境中,当我们尝试使用`unzip`命令解压包含中文文件名的压缩包时,经常会出现中文乱码的问题。这是因为`unzip`程序在处理非ASCII字符时,可能会使用其内部默认的编码方式,而这个编码方式并不支持中文字符集...
"sqlite3 for delphi 解决中文乱码问题"这个主题,正是针对这一问题提供了解决方案。这里我们将详细探讨SQLite3在Delphi中的应用,中文乱码的成因,以及如何通过自定义修改来解决这个问题。 首先,SQLite3是一个轻...
对于上传RAR和ZIP文件的解压,Java标准库提供了`java.util.zip`包,包含`ZipInputStream`和`ZipFile`类来处理ZIP文件,而RAR文件则需要第三方库如Apache Commons Compress。下面是一个解压ZIP文件的例子: ```java ...