`

ZipInputStream解压页面上传的文件

阅读更多

参考:

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;
	}
}

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ZipInputStream解压有中文名报错问题解决

    在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...

    JAVA 上传ZIP,RAR文件并解压

    对于上传RAR和ZIP文件的解压,Java标准库提供了`java.util.zip`包,包含`ZipInputStream`和`ZipFile`类来处理ZIP文件,而RAR文件则需要第三方库如Apache Commons Compress。下面是一个解压ZIP文件的例子: ```java ...

    ZIP文件解压上传服务器

    - 大文件解压时,可以考虑使用缓冲区以提高效率。 - 对于大量文件的上传,可以考虑使用多线程或者异步处理,提高并发性能。 5. **安全考虑**: - 验证ZIP文件来源,防止恶意文件上传。 - 解压文件到临时目录,...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    Java实现的带密码压缩与解压zip文件源码

    `ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压ZIP文件。为了添加密码保护,我们需要在创建`ZipOutputStream`时设置一个密码。 1. **密码保护**:在压缩过程中,可以使用`ZipEntry`对象来...

    apache zip + jspsmartupload.jar 实现文件上传并自动解压

    - 文件解压的目标路径应进行严格控制,避免覆盖或写入敏感区域。 - 对上传文件大小进行限制,防止过大文件耗尽服务器资源。 6. **压缩包子文件的文件名称列表**: - `Jspsmart.jsp`:可能是一个示例JSP页面,...

    java 支持中文解压:一行代码解决 java.util.zip.ZipInputStream 中文乱码;--文件处理通用类

    1、文件解压zip通用机制方法、一行代码支持中文; 2、一行代码解决 java.util.zip.ZipInputStream 中文乱码; 3、删除指定路径内的所有文件通用机制方法;

    解压ZIP文件,通用解压器

    MessageBox(0, "文件读取", "文件解压失败", 16); } } /** * @dll.import("USER32", auto) */ public static native int MessageBox(int hWnd, String lpText, String lpCaption, int uType); } ``` #### ...

    Java实现文件的压缩和解压

    如文件解压函数如下 private void unZip(String zipFileName, String outputDirectory)throws Exception { InputStream in=null; FileOutputStream out=null; try { ZipFile zipFile = new ZipFile...

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

    java ftp上传 下载 文件压缩解压

    这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...

    java实现文件解压缩,ZipInputStream,ZipOutputStream

    java实现文件解压缩,ZipInputStream,ZipOutputStream

    java实现批量解压带密码的 rar or zip 文件

    1. **ZIP文件解压**: 使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`...

    java解压zip格式文件

    其中,`ZipInputStream`用于读取Zip文件,而`ZipEntry`表示Zip文件中的单个条目(即压缩的文件或目录)。 要解压一个Zip文件,我们需要按照以下步骤操作: 1. **打开Zip文件**:使用`FileInputStream`打开Zip文件...

    android 解压.ZIP文件实例

    在Android平台上,解压.ZIP文件是一个常见的任务,特别是在开发应用程序时,可能需要将资源文件或数据包以ZIP格式分发并动态解压到设备上。这篇博客文章“android 解压.ZIP文件实例”提供了关于如何在Android环境中...

    使用Java向服务器上传文件压缩包并实现解压缩

    在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...

    使用java代码替换zip内的文件.docx

    在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...

    安卓文件下载上传解压相关-Android在线下载压缩包并解压到指定目录源码.rar

    在Android平台上,文件的下载、上传以及解压是常见的操作,尤其在应用更新、数据同步或者用户交互中。本文将详细讲解如何实现Android在线下载压缩包并将其解压到指定目录,以及源码中可能涉及的关键技术和注意事项。...

    文件解压和压缩(zip)

    1. **文件解压:** 解压ZIP文件的核心在于`ZipInputStream`类,它可以逐个读取ZIP文件中的条目并将其解压。首先,我们需要创建一个`FileInputStream`来读取ZIP文件,然后用它来初始化`ZipInputStream`。接着,我们...

    java后台解压压缩文件

    前端上传ZIP压缩文件 使用 ZipInputStream 来解压至指定目录中.

Global site tag (gtag.js) - Google Analytics