`
conrelyhong
  • 浏览: 64963 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JAVA读取压缩包并上传文件

阅读更多

 一个Java读取压缩包并上传文件 例子

 

package com.bsteel.newbase.admin.uploadfile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import com.bsteel.newbase.admin.uploadfile.form.UpLoadFileForm;
import com.bsteel.rscenter.util.Constants;

public class UpLoadFileAction extends Action {
	protected Log log = LogFactory.getLog(getClass());
	private static final String filePath = "/WEB-INF/classes/config/config.properties";

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		UpLoadFileForm uploadfileform = (UpLoadFileForm) form;
		if (StringUtils.defaultString(uploadfileform.getJSP_PATH()).equals(
				"upload")) {
			if (uploadfileform.getUpLoadFileName() == null
					|| uploadfileform.getTemplate() == null
					|| "".equals(uploadfileform.getUpLoadFileName())
					|| "".equals(uploadfileform.getTemplate())) {
				request.setAttribute("showok", "0");
				return mapping.findForward("success");
			}
			// 读取文件信息
			System.out.println("uploadfileform.getTheFile()="
					+ uploadfileform.getUpLoadFileName());
			FormFile theFile = uploadfileform.getUpLoadFileName();
			// 判断上传文件类型及规定"cbf"
			String fileName = theFile.getFileName();
			int pos = fileName.lastIndexOf(".");
			String postfix = fileName.substring(pos + 1).trim();
			String cbfstr = fileName.substring(0, 3).trim();
			System.out.println("postfix=" + postfix);
			if (!postfix.equalsIgnoreCase(Constants.FILE_ZIP)
					|| !cbfstr.equals("cbf")) {
				request.setAttribute("showok", "1");
				return mapping.findForward("success");
			} else {
				// 备份原有文件
				removeFiles(uploadfileform.getTemplate());
				// 上传文件
				try {
					String[] path = loadConfig();
					unzip(theFile, path[0], uploadfileform.getTemplate());
					request.setAttribute("showok", "2");
					log.info("文件上传成功!");
				} catch (Exception e) {
					log.info("上传文件失败:" + e.getMessage());
				}
			}
		}
		return mapping.findForward("success");
	}

	/**
	 * 读取资源文件
	 * 
	 * @return
	 */

	private String[] loadConfig() {

		Properties config = new Properties();
		String[] properties = new String[2];
		try {
			InputStream is = getClass().getResourceAsStream(filePath);
			if (is == null) {
				return null;
			} else {
				config.load(is);
				properties[0] = config.getProperty("datapath");
				properties[1] = config.getProperty("bakpath");
			}
			return properties;
		} catch (Exception ex) {
			return null;
		}
	}

	/**
	 * 
	 * 备份同类型文件
	 */

	private void removeFiles(String str) {
		SimpleDateFormat formatDate = new SimpleDateFormat("yyMMdd");
		String[] path = loadConfig();
		File f = new File(path[0]);
		if (f.exists()) {
			File[] fileList = f.listFiles();
			for (int i = 0; i < fileList.length; i++) {
				String filename = fileList[i].getName();
				int beginInt = filename.indexOf("_") + 1;
				int endInt = filename.indexOf(".");
				if (filename.substring(beginInt, endInt).equals(str)) {
					fileList[i].renameTo(new File(path[1]
							+ fileList[i].getName()
							+ formatDate.format(new Date()) + ".bak"));
					log.info("remove file ->" + fileList[i].getName());
				}
			}
		}
	}

	/**
	 * 
	 * 上传zip文件
	 */

	public void unzip(FormFile thefile, String outputDirectory, String str) {
		try {
			ZipInputStream in = new ZipInputStream(thefile.getInputStream());
			ZipEntry z = in.getNextEntry();
			while (z != null) {
				String zipsName = z.getName();
				// 提取压缩包中的xml文件
				int pos = zipsName.lastIndexOf(".");
				String postXml = zipsName.substring(pos + 1).trim();
				if (postXml.equalsIgnoreCase(Constants.FILE_XML)) {
					File f = new File(outputDirectory);
					f.mkdir();
					if (z.isDirectory()) {
						f = new File(outputDirectory + "documents_" + str + "."
								+ Constants.FILE_XML);
						f.mkdir();
					} else {
						f = new File(outputDirectory + "documents_" + str + "."
								+ Constants.FILE_XML);
						f.createNewFile();
						FileOutputStream out = new FileOutputStream(f);
						int b;
						while ((b = in.read()) != -1) {
							out.write(b);
						}
						out.close();
					}
					// 读取下一个ZipEntry
					z = in.getNextEntry();
				}
			}
			in.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 文章引自:http://blog.163.com/yangjuqi@126/blog/static/28452285200791192638761/

分享到:
评论

相关推荐

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

    使用Java远程上传压缩包到服务器,或者在服务器上拉去压缩包或者文件,在服务器上创建目录。

    java中读取shp文件数据存入数据库

    shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库

    java excel 读取 用 zip 方式。不用第三方包

    /** * 根据 策划的配置表来生成 json * excel 目前使用的版本为2007,其他版本未测试... * 读取文件 一般用于本地文件的生成, * 二进制的方式,一般用于 后台管理界面 的文件上传后的处理。 * @author wgq * */

    如何使用Java代码获取文件、文件流或字符串的编码方式.zip

    本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    SpringBoot前端网页上传文件案例

    java web前端上传文件到后台常用三种方式,包括from表单提交、ajax提交、FormData对象提交,框架采用Spring Boot。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    java源码包---java 源码 大量 实例

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    java源码包4

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...

    java源码包3

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...

    java源码包2

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    mac 压缩文件

    序列号说明: 名稱:Macintosh S/N:GZ0NX-ZWHAH-A50W1-2W28Z-X7TYU-L4FMT

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics