`

上传ZIP文件并解压,并读取解压文件。

 
阅读更多

1、上传ZIP文件

public class BaseAction extends ActionSupport {
	
	private static final long serialVersionUID = 1L;

	private HttpServletRequest request;
	
	private HttpServletResponse response;
	
	private File file;
	
	private String fileFileName;
	
	private String fileContentType;
	
	private String fileType;
	
	private String fileSize;
	
	protected void uploadFile(String floder)throws Exception{
		InputStream is = null;
		OutputStream os = null;
		try{
			if(file != null){
				String[] fnType = fileFileName.split("\\.");
				if(fileType.indexOf(fnType[1].toUpperCase())!=-1){
					
					String realPath = ServletActionContext.getServletContext().getRealPath(floder);
					//getRequest().get
					File fileR = new File(realPath);
					if(!fileR.exists()){
						fileR.mkdirs();
					}
					fileR = new File(realPath,fileFileName);
					if(!fileR.exists()){
						fileR.createNewFile();
					}
					os = new FileOutputStream(fileR);
					is = new FileInputStream(file);
					byte[] b = new byte[1024*100];
					int length = 0;
					boolean tag = false;
					StringBuilder sbC = new StringBuilder();
					while((length=is.read(b))!=-1){
						if(length>Integer.parseInt(fileSize)){
							tag = true;
							getRequest().setAttribute("fileS", "fileSize");
							fileR.delete();
							break;
						}
						os.write(b,0,length);
						sbC.append(new String(b,0,length,"utf-8"));
					}
					if(tag==false){
						getRequest().setAttribute("content", sbC.toString());
						getRequest().setAttribute("filePath", floder+"/"+fileFileName);
					}
				}else{
					getRequest().setAttribute("fileT", "fileType");
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}finally{
			if(is != null){
				is.close();
			}
			if(os != null){
				os.close();
			}
		}
	}
	
	public HttpServletRequest getRequest() {
		return request = ServletActionContext.getRequest();
	}

	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}

	public HttpServletResponse getResponse() {
		return response = ServletActionContext.getResponse();
	}

	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public String getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}

	public String getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}

	public String getFileSize() {
		return fileSize;
	}

	public void setFileSize(String fileSize) {
		this.fileSize = fileSize;
	}

	public String getFileType() {
		return fileType;
	}

	public void setFileType(String fileType) {
		this.fileType = fileType;
	}
	
	
}

 2、读取ZIP文件,并开始解压文件,读取文件内容

 

 

代码中向旗添加的为主要程序

public class CrawlerMgrConfAction extends BaseAction{
	
	private static final long serialVersionUID = 1L;

	private CrawlerMgrConfService crawlerMgrConfService;
	
	private List<CrawlerMgrConf> listCrawlerMgrCon;
	
	private CrawlerMgrConf crawlerMgrConf;
	
	private OpponentMgrService opponentMgrService;
	
	private String alterInfo ="";

	protected Log log = LogFactory.getLog(this.getClass());
	
	public OpponentMgrService getOpponentMgrService() {
		return opponentMgrService;
	}

	public void setOpponentMgrService(OpponentMgrService opponentMgrService) {
		this.opponentMgrService = opponentMgrService;
	}

	private List<Site> listPisTSite;
	
	public String toCrawlerMgrConfList()throws Exception{
		try{
			listCrawlerMgrCon = crawlerMgrConfService.getListCrawlerMgrConfByObj(crawlerMgrConf);
			listPisTSite = opponentMgrService.getSiteList(null);
			Map<Integer, Site> mapPisTSite = new HashMap<Integer, Site>();
			for(Site pts :listPisTSite){
				mapPisTSite.put(pts.getSiteId().intValue(), pts);
			}
			getRequest().setAttribute("mapPisTSite", mapPisTSite);
			return "crawlerMgrConfList";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	public String toCrawlerMgrConfAdd()throws Exception{
		try{
			listPisTSite = opponentMgrService.getSiteList(null);
			return "crawlerMgrConfAdd";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	/**
	 * 向旗添加
	 * 实现点击后跳转到批量上传的页面
	 * @return
	 * @throws Exception
	 */
	public String toCrawlerMgrConfBatchSave()throws Exception{
		try{
			listPisTSite = opponentMgrService.getSiteList(null);
			return "crawlerMgrConfBatchSave";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	/**
	 * 向旗添加
	 * 实现批量增加配置文件或者批量修改配置文件,能够对一个ZIP包
	 * 里的文件实现对数据库的更新和增加操作
	 * @return
	 * @throws Exception
	 */
	public String doCrawlerMgrConfBatchSave()throws Exception{
		crawlerMgrConf = new CrawlerMgrConf();
		//实现ZIP文件的上传到upload_file_zip文件夹
		String folder = "upload_file_zip";
		String realPath = ServletActionContext.getServletContext().getRealPath("upload_file_zip");
		try{
			File myFilePath = null ;
			if(this.getFile()!=null){
				
				    this.uploadFile(folder);
					log.info("得到的ZIP文件的路径"+realPath+"\\"+this.getFileFileName());
					//对存储的ZIP文件进行解压缩
					ZipFile zipFile = new ZipFile(realPath+"\\"+this.getFileFileName());
					Enumeration emu =zipFile.entries();
					
					//存储上传的文件名
					String xmlAddFilesNames = "";
					String[] xmlFilearr ;
					while(emu.hasMoreElements()){
						ZipEntry entry = (ZipEntry)emu.nextElement();
						String fileName = entry.getName();
						String fileNath = realPath+"\\"+entry.getName();
						if(entry.isDirectory()){
							myFilePath = new File(realPath+"\\"+entry.getName());
							if(!myFilePath.exists()){
								myFilePath.mkdirs();
							}
							continue;
						}
						BufferedInputStream bis1 =
							new BufferedInputStream(zipFile.getInputStream(entry));
						
						File fileins = new File(realPath+"\\"+entry.getName());
						if(!fileins.exists()){
							fileins.createNewFile();
						}
						FileOutputStream fos = new FileOutputStream(fileins);
						BufferedOutputStream bos = new BufferedOutputStream(fos,2048);
						int count ;
						byte data[] = new byte[2048];
						StringBuilder sbC = new StringBuilder();
						while((count = bis1.read(data,0,2048))!=-1){
//							bos.write(data,0,count);
							sbC.append(new String(data,0,2048,"utf-8"));
						}
						xmlAddFilesNames = fileName;
						xmlFilearr = xmlAddFilesNames.split("\\.");
						//通过文件名判断属于哪个网站
						listPisTSite = opponentMgrService.getSiteList(null);
						int i = 0;
						for(int j=0;j<listPisTSite.size();j++){
							if(xmlAddFilesNames.indexOf(listPisTSite.get(j).getShortName())>-1){
								crawlerMgrConf.setSiteId(listPisTSite.get(j).getSiteId());
								i=1;
							}
						}
						if(i==0){
							alterInfo ="根据上传文件判断文件名与网站的缩写不一致或有不存在的对手网站"+xmlAddFilesNames;
							return "crawlerMgrConfBatchSave";
						}
						if(!xmlFilearr[1].equalsIgnoreCase("xml")){
							alterInfo ="包里存在文件不符合格式"+xmlAddFilesNames;
							return "crawlerMgrConfBatchSave";
						}else{
						crawlerMgrConf.setFilePath(fileNath);
						crawlerMgrConf.setCreateTime(new Date());
						crawlerMgrConf.setUpdateTime(new Date());
						crawlerMgrConf.setContent(sbC.toString());
						crawlerMgrConf.setType(xmlFilearr[0].split("/")[1]);
						crawlerMgrConfService.insertCrawlerMgrConf(crawlerMgrConf);}
						bos.flush();
						bos.close();
						bis1.close();
					}
					zipFile.close();
				}
				
			return "crawlerMgrConfList";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	public String doCrawlerMgrConfSave()throws Exception{
		try{
			if(crawlerMgrConf!=null && this.getFile()!=null){
				
				//WEB-INF/classes/crawler_conf
				this.uploadFile("upload_file");
				if(!this.getFileFileName().split("\\.")[0].equals(crawlerMgrConf.getType())){
					alterInfo ="文件名必须和配置名一样";
					listPisTSite = opponentMgrService.getSiteList(null);
					return "crawlerMgrConfAdd";
				}
					
				Object fileT = getRequest().getAttribute("fileT");
				Object fileS = getRequest().getAttribute("fileS");
				if(fileT!=null || fileS!=null){
					return toCrawlerMgrConfAdd(); 
				}
				
				String filePath = (String)getRequest().getAttribute("filePath");
				if(UtilFunction.isNotEmpty(filePath)){
					crawlerMgrConf.setFilePath(filePath);
					crawlerMgrConf.setCreateTime(new Date());
					crawlerMgrConf.setUpdateTime(new Date());
					crawlerMgrConf.setContent((String)getRequest().getAttribute("content"));
					crawlerMgrConfService.insertCrawlerMgrConf(crawlerMgrConf);
				}
			}
			return "crawlerMgrConfList";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	public String toCrawlerMgrConfModify()throws Exception{
		try{
			if(crawlerMgrConf!=null && 
			   UtilFunction.isNotEmpty(crawlerMgrConf.getType()) &&
			   crawlerMgrConf.getSiteId()!=null){
				listPisTSite = opponentMgrService.getSiteList(null);
				crawlerMgrConf = crawlerMgrConfService.getCrawlerMgrConfByType(crawlerMgrConf);
			}
			return "crawlerMgrConfAdd";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}
	
	public String doCrawlerMgrConfDelete()throws Exception{
		try{
			if(crawlerMgrConf!=null && UtilFunction.isNotEmpty(crawlerMgrConf.getType())){
				crawlerMgrConfService.deleteCrawlerMgrConfByType(crawlerMgrConf);
				getRequest().setAttribute("sucess", "sucess");
			}
			listCrawlerMgrCon = crawlerMgrConfService.getListCrawlerMgrConfByObj(crawlerMgrConf);
			return "crawlerMgrConfList";
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
	}

	public CrawlerMgrConfService getCrawlerMgrConfService() {
		return crawlerMgrConfService;
	}

	public void setCrawlerMgrConfService(CrawlerMgrConfService crawlerMgrConfService) {
		this.crawlerMgrConfService = crawlerMgrConfService;
	}

	public List<CrawlerMgrConf> getListCrawlerMgrCon() {
		return listCrawlerMgrCon;
	}

	public void setListCrawlerMgrCon(List<CrawlerMgrConf> listCrawlerMgrCon) {
		this.listCrawlerMgrCon = listCrawlerMgrCon;
	}

	public CrawlerMgrConf getCrawlerMgrConf() {
		return crawlerMgrConf;
	}

	public void setCrawlerMgrConf(CrawlerMgrConf crawlerMgrConf) {
		this.crawlerMgrConf = crawlerMgrConf;
	}

	public List<Site> getListPisTSite() {
		return listPisTSite;
	}

	public void setListPisTSite(List<Site> listPisTSite) {
		this.listPisTSite = listPisTSite;
	}

	public String getAlterInfo() {
		return alterInfo;
	}

	public void setAlterInfo(String alterInfo) {
		this.alterInfo = alterInfo;
	}
}
 

如果在linux下发布,则需要更改路径/为File.separator

分享到:
评论

相关推荐

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

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

    JAVA 上传ZIP,RAR文件并解压

    在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...

    ZIP文件解压上传服务器

    本场景涉及的是使用Java处理ZIP文件,解压后并将解压的文件上传至服务器。以下是对这一过程的详细阐述: 首先,我们需要理解`ZIP`文件格式。ZIP是一种常用的文件压缩格式,它能将多个文件或目录打包成一个单一的...

    delphi解压ZIP文件

    通过本文的介绍,我们可以看到,在Delphi中解压ZIP文件并不复杂,只需借助 `TVCLUnZip` 类即可轻松完成。本文提供的代码示例简洁明了,易于理解和应用。开发者可以根据实际项目需求调整相关参数,实现更灵活的功能...

    ZIP文件的解压

    本教程将专注于使用`ZipArchive`库来解压ZIP文件,并详细解释相关知识点。 首先,`ZipArchive`是一个开源的Objective-C库,专为iOS和macOS平台设计,用于处理ZIP文件的压缩与解压缩。它提供了简单易用的API,让...

    C++实现ZIP文件解压

    1. **读取ZIP文件头**:解压过程的第一步是识别ZIP文件的起始标识符,即`PK\003\004`。这表示ZIP文件的中央目录头。找到此标志后,你可以解析后续的字段以获取关于文件的信息。 2. **解析中央目录**:在找到目录头...

    易语言zip解压

    易语言程序可以通过读取这个区段并解析其内容来获取ZIP文件中的所有文件名。 "读取某个ZIP文件"则涉及文件的解压缩过程。找到对应文件在ZIP文件中的位置后,我们需要使用解压缩算法(如DEFLATE)来解码数据块。解压...

    js解压读取zip文件

    本篇文章将深入探讨如何使用`zip.js`来解压并读取ZIP文件。 首先,为了使用`zip.js`,你需要将其引入到你的项目中。如果你使用的是现代的前端构建工具,如Webpack或Rollup,你可以通过npm或yarn安装: ```bash npm...

    C++ Zlib库实现zip文件压缩解压(支持递归压缩)

    解压缩过程相对简单,使用`minizip`的`unzip`函数可以打开`zip`文件,再通过`unzipOpenCurrentFile`、`unzipReadCurrentFile`和`unzipCloseCurrentFile`等函数读取并解压缩每个文件,然后写入到目标位置。...

    解压ZIP文件,通用解压器

    通常,解压过程会涉及到读取ZIP文件头信息、提取压缩数据并将其写入磁盘等步骤。 ### Java中解压ZIP文件的方法 Java提供了强大的标准库支持来处理ZIP文件,包括压缩与解压缩功能。这里主要介绍如何使用`java.util....

    IOS 解压zip 文件

    在iOS平台上,解压ZIP文件是一项常见的任务,无论是为了分发应用程序更新、处理用户上传的数据还是下载内容。本文将深入探讨如何在iOS中实现ZIP文件的解压操作,结合源码和工具,帮助开发者更好地理解和应用这一技术...

    在线解压zip文件程序

    它可能包含了读取ZIP文件结构、调用解压函数(如PHP内置的`unzip()`函数或第三方库如PclZip)以及处理解压后的文件等功能。 在线解压服务的成功运行需要服务器环境的支持。例如,服务器必须有足够的存储空间来临时...

    PHP在线压缩解压ZIP文件

    unzip.php可能包含了处理ZIP文件解压的逻辑,包括读取ZIP文件、检查密码、解压缩文件到服务器指定位置等步骤。而zip.php则可能负责文件的压缩操作,它需要遍历要打包的文件和目录,创建新的ZIP文件,并将文件添加到...

    android ZIP文件的解压

    综上所述,理解并正确使用ZIP文件解压技术是Android开发者必备的技能之一,这不仅涉及基本的文件操作,还可能涉及到权限管理、性能优化等多个方面。通过熟练掌握这一技术,可以提升应用的用户体验和功能完整性。

    php解压zip文件

    这通常涉及到读取、创建、修改或解压ZIP文件。在这个场景中,我们关注的是如何使用PHP解压ZIP文件。下面将详细介绍PHP解压ZIP文件的核心知识点,并提供相关的代码示例。 ### PHP ZIP扩展 PHP提供了一个内置的ZIP...

    zip文件压缩解压源码 (c++)

    `XUnzip.cpp`可能包含了这样的逻辑,它会逐个读取zip文件中的每个成员,解压缩数据,并将其写入到目标文件或目录中。 在`XUnzip.h`和`XZip.h`中,我们可能看到如下的函数声明: 1. `bool compressFile(const std::...

    zip.js解压zip文件

    其中,`zip.js`是一个功能强大且灵活的JavaScript库,专门用于处理ZIP文件的创建、读取和解压。本文将深入探讨如何使用`zip.js`库来解压ZIP文件,以满足开发者在前端或Node.js环境中的各种需求。 首先,让我们了解`...

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

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

    Android对Zip文件的加压和解压

    1. **读取Zip文件**:使用`ZipInputStream`来读取Zip文件。首先,我们需要创建一个`FileInputStream`对象,然后将其传递给`ZipInputStream`的构造函数。 ```java FileInputStream fis = new FileInputStream("path_...

    C语言实现Zip压缩解压.rar

    例如,使用libzip库,我们可以通过`zip_open()`函数打开ZIP文件,`zip_fopen_index()`来获取指定文件的读取流,然后使用`zip_fread()`读取数据。对于压缩,可以调用`zip_entry_open()`,`zip_entry_write()`和`zip_...

Global site tag (gtag.js) - Google Analytics