参考:
http://www.cnblogs.com/lrh-xl/p/5509005.html
http://www.cnblogs.com/DreamDrive/p/5760477.html
package import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import javax.servlet.ServletContext; import org.springframework.web.multipart.MultipartFile; import com.google.common.collect.Maps; public class TestZipFile { public static void main(String[] args) { uploadInvoceFile(null,null); } /** * 解压页面上传的zip文件 * @param context * @param invoiceFile * @return */ static Map<String,Object> uploadInvoceFile(ServletContext context,MultipartFile multipartFile){ Map<String,Object> resultMap = Maps.newHashMap(); int sumOk = 0; int sumAll = 0; String savepath = DateUtils.getDate2Str("yyyy/MM/dd",new Date()); String basepath = context.getRealPath("/"); String path = basepath +"upload/invoice" + savepath+ "/"; String zipPath = path + multipartFile.getOriginalFilename(); //确保目录文件存在 File pathFile = new File(path); if(!pathFile.exists()){ pathFile.mkdirs(); } File zipTemp = new File(zipPath); ZipFile zipFile = null; try { multipartFile.transferTo(zipTemp); zipFile = new ZipFile(zipTemp); ZipInputStream zis = new ZipInputStream ( new FileInputStream(zipTemp) ) ; ZipEntry zipEntry = null ; byte[] bt = new byte[1024]; //遍历zip中的文件 while((zipEntry = zis.getNextEntry()) != null){ //System.out.println(zipEntry.getName());//3379_1234.jpg //System.out.println(zipEntry.getMethod());//8 //System.out.println(zipEntry.getSize());//-1 sumAll ++; //校验是否为订单号 String regex = "^[0-9]*$"; String orderId = zipEntry.getName().substring(0, zipEntry.getName().indexOf("_")); if(zipEntry.isDirectory() || StringUtils.isEmpty(orderId) || !orderId.matches(regex)){ continue; } String writecheckcode = zipEntry.getName().substring(zipEntry.getName().indexOf("_") + 1,zipEntry.getName().lastIndexOf(".")); File oneInvoice = new File(path + zipEntry.getName()); InputStream is = zipFile.getInputStream(zipEntry); OutputStream os = new FileOutputStream(oneInvoice) ; int len = 0; while((len = is.read(bt)) > 0){ os.write(bt,0,len); } os.close(); is.close(); //文件保存的相对路径 String shortPath = (path + zipEntry.getName()).replace(basepath, "/"); } zis.close(); zipFile.close(); } catch (IllegalStateException e) { e.printStackTrace(); resultMap.put("hasException",1); } catch (IOException e) { e.printStackTrace(); resultMap.put("hasException",1); } catch (Exception e) { e.printStackTrace(); resultMap.put("hasException",1); } finally{ //删除zipTemp zipTemp.delete(); resultMap.put("sumAll",sumAll); resultMap.put("sumOk",sumOk); resultMap.put("sumFail",sumAll - sumOk); } return resultMap; } }
相关推荐
在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...
对于上传RAR和ZIP文件的解压,Java标准库提供了`java.util.zip`包,包含`ZipInputStream`和`ZipFile`类来处理ZIP文件,而RAR文件则需要第三方库如Apache Commons Compress。下面是一个解压ZIP文件的例子: ```java ...
- 大文件解压时,可以考虑使用缓冲区以提高效率。 - 对于大量文件的上传,可以考虑使用多线程或者异步处理,提高并发性能。 5. **安全考虑**: - 验证ZIP文件来源,防止恶意文件上传。 - 解压文件到临时目录,...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
`ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压ZIP文件。为了添加密码保护,我们需要在创建`ZipOutputStream`时设置一个密码。 1. **密码保护**:在压缩过程中,可以使用`ZipEntry`对象来...
- 文件解压的目标路径应进行严格控制,避免覆盖或写入敏感区域。 - 对上传文件大小进行限制,防止过大文件耗尽服务器资源。 6. **压缩包子文件的文件名称列表**: - `Jspsmart.jsp`:可能是一个示例JSP页面,...
1、文件解压zip通用机制方法、一行代码支持中文; 2、一行代码解决 java.util.zip.ZipInputStream 中文乱码; 3、删除指定路径内的所有文件通用机制方法;
MessageBox(0, "文件读取", "文件解压失败", 16); } } /** * @dll.import("USER32", auto) */ public static native int MessageBox(int hWnd, String lpText, String lpCaption, int uType); } ``` #### ...
如文件解压函数如下 private void unZip(String zipFileName, String outputDirectory)throws Exception { InputStream in=null; FileOutputStream out=null; try { ZipFile zipFile = new ZipFile...
在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...
这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...
java实现文件解压缩,ZipInputStream,ZipOutputStream
1. **ZIP文件解压**: 使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`...
其中,`ZipInputStream`用于读取Zip文件,而`ZipEntry`表示Zip文件中的单个条目(即压缩的文件或目录)。 要解压一个Zip文件,我们需要按照以下步骤操作: 1. **打开Zip文件**:使用`FileInputStream`打开Zip文件...
在Android平台上,解压.ZIP文件是一个常见的任务,特别是在开发应用程序时,可能需要将资源文件或数据包以ZIP格式分发并动态解压到设备上。这篇博客文章“android 解压.ZIP文件实例”提供了关于如何在Android环境中...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...
在Android平台上,文件的下载、上传以及解压是常见的操作,尤其在应用更新、数据同步或者用户交互中。本文将详细讲解如何实现Android在线下载压缩包并将其解压到指定目录,以及源码中可能涉及的关键技术和注意事项。...
1. **文件解压:** 解压ZIP文件的核心在于`ZipInputStream`类,它可以逐个读取ZIP文件中的条目并将其解压。首先,我们需要创建一个`FileInputStream`来读取ZIP文件,然后用它来初始化`ZipInputStream`。接着,我们...
前端上传ZIP压缩文件 使用 ZipInputStream 来解压至指定目录中.