一个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/