Java 文件打包下载 整体

来源:互联网 发布:python计算器 界面 编辑:程序博客网 时间:2024/05/24 01:25
private final static String baseDir=System.getProperty("user.dir")+"/wangzi/";// 主文件夹
private final static String fileDir=baseDir+"/file/";// 文件 文件夹
private final static String zipUrl=baseDir+"/zip/";// zip文件夹


public CommonResult<Object>Synchronize()throws Exception{if(!new File(baseDir).isDirectory()){//创建你的临时目录
new File(baseDir).mkdirs();}if(!new File(fileDir).isDirectory()){//创建临时文件目录
new File(fileDir).mkdirs();}if(!new File(zipUrl).isDirectory()){//创建生成zip目录
new File(zipUrl).mkdirs();}try{
//查出你的List
List<T>list=listService.findList();writeFile("EOCashierWay.json",list);//写出文件名称,和内容
FileZip.zip(fileDir,zipUrl+"T.zip");// 文件打包
FileUtil.download(response,"T.zip",zipUrl+"T.zip");// 文件下载
}catch(Exception e){e.printStackTrace();}finally{FileUtil.deleteDir(new File(baseDir));//删除临时文件夹
}return commonResult;}


/**
* 写出临时文件

* @param fileUrl 
* @param fileName 
* @param t
* @throws Exception
*/
public<T>void writeFile(String fileName,T t)throws Exception{OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream(fileDir+fileName),"UTF-8");System.out.println(JSON.toJSONString(t));out.write(JSON.toJSONString(t));out.flush();out.close();}


/**
* 删除文件夹
* @param path

*/
public static void deleteDir(File path){if(!path.exists())return;if(path.isFile()){path.delete();return;}File[]files=path.listFiles();for(int i=0;i<files.length;i++){deleteDir(files[i]);}path.delete();}


/**
 * java压缩成zip 需要打包的文件夹 生成zip文件的位置 目录+T.zip
 */
public class FileZip {
/**
* @param inputFileName
*            你要压缩的文件夹(整个完整路径)
* @param zipFileName
*            压缩后的文件(整个完整路径)
*/
public static void zip(String inputFileName, String zipFileName) throws Exception {
zip(zipFileName, new File(inputFileName));
}


private static void zip(String zipFileName, File inputFile) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
zip(out, inputFile, "");
out.flush();
out.close();
}


private static void zip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
// System.out.println(base);
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}


}


/**

* @Description: TODO(文件下载) 
* @param response
* @param fileName  下载文件名称
* @param filePath  下载文件路径
* @throws IOException
* @author tianyi  
* @date 2015年8月26日 上午11:41:55 
* @version V1.0
*/
public static void download(HttpServletResponse response, String fileName, String filePath) throws IOException{
FileInputStream fis = null;
        BufferedInputStream buff = null;
try {
    File file = new File(filePath);
    response.setContentType("application/x-msdownload");//设置response的编码方式
            response.setContentLength((int)file.length());//写明要下载的文件的大小
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso-8859-1")); //解决中文乱码
       //读出文件到i/o流
       fis = new FileInputStream(file);
       buff = new BufferedInputStream(fis);
       byte[] bytes = new byte[1024];//相当于我们的缓存
       long k = 0;//该值用于计算当前实际下载了多少字节
       OutputStream os = response.getOutputStream();//从response对象中得到输出流,准备下载
       //开始循环下载
       while(k < file.length()){
           int j = buff.read(bytes, 0, 1024);
           k += j;
           os.write(bytes, 0, j);//将b中的数据写到客户端的内存
       }
       os.flush();//将写入到客户端的内存的数据,刷新到磁盘
       os.close();
       buff.close();
       buff = null;
       
       fis.close();
       fis = null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if(buff != null){
buff.close();
       buff = null;
}
if(fis != null){
fis.close();
fis = null;
}
}
}
原创粉丝点击