最近项目有一模块上处理上传ZIP文件,总结一下处理方法
File[] files=null;
try {
MultiPartRequestWrapper mpRequest =(MultiPartRequestWrapper)request; //struts2:对REQUEST进行转换,用于得到上传文件
HttpSession session=request.getSession();
files = mpRequest.getFiles("upload");
String[] fileNames = mpRequest.getFileNames("upload"); //得到文件名
String folder = request.getSession().getServletContext().getRealPath("input");//文件存放路径
for(int i=0;i<files.length;i++){
File file = new File(folder,fileName[i]); //存放文件
InputStream in; //输入流
try {
in = new FileInputStream(item); //得到文件上传流
FileOutputStream out = new FileOutputStream(files[i]);
byte[] buffer = new byte[4096]; // To hold file contents
int bytes_read;
while ((bytes_read = in.read(buffer)) != -1) {
out.write(buffer, 0, bytes_read);
}
if (in != null) { //关闭输入流
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) { //关闭输出流
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
UnZipper un=UnZipper.getInstance(); //Zip文件类实例化
un.UnZip(folder+"\\"+fileName); //解压ZIP文件(在服务器存储空间中)
fileName =fileName.replace('/', '\\').substring(0,fileName.lastIndexOf("."))+"\\"; //得到解压后文件夹名称
dirFile = new File(folder+"\\"+fileName); //得到解压后文件夹路径
File[] list = FileUtil.listSortedFiles(dirFile); //遍立文件夹,得到文件夹所有文件
if(list!=null&&list.length<5){ //如果文件数为小于5个,抛出
throw new BusinessException("文件数必需为5个");
}
if(list!=null&&list.length==5){ //文件名不符,抛出
for (int i = 0; i < list.length; i++){
if(!list[i].getName().equals("F"+(i+1)+".txt")){
throw new BusinessException("文件名称格式必需为F1.txt~F5.txt");
}
}
}
files[i].delete(); //删除上传文件
}
} catch (Exception e) {
if(files!=null){
for(File f:files){
if(f!=null){
f.delete(); //删除上传文件
}
}
}
e.printStackTrace();
解后得到文件后,进行业务处理