怎么用java打包多个文件夹和文件呢??看清楚,是多个文件夹和文件。

Python012

怎么用java打包多个文件夹和文件呢??看清楚,是多个文件夹和文件。,第1张

两重for循环,大体逻辑如下:

for( int i =0 i <大文件夹数i ++){

String name = 生成大文件夹名;

File parent = new File(目录 + “/" + name)

parent.mkdir()

for( int j = 0j <30j ++){

String subName = 生成小文件夹名;

File child = new File(parent, subName)

child.mkdir()

}

}

在JDK中有一个zip工具类:

java.util.zip    Provides classes for reading and writing the standard ZIP and

GZIP file formats.

使用此类可以将文件夹或者多个文件进行打包压缩操作。

在使用之前先了解关键方法:

ZipEntry(String name)         Creates a new zip entry with the specified name.

使用ZipEntry的构造方法可以创建一个zip压缩文件包的实例,然后通过ZipOutputStream将待压缩的文件以流的形式写进该压缩包中。具体实现代码如下:

import java.io.BufferedInputStream  

import java.io.BufferedOutputStream  

import java.io.File  

import java.io.FileInputStream  

import java.io.FileNotFoundException  

import java.io.FileOutputStream  

import java.io.IOException  

import java.util.zip.ZipEntry  

import java.util.zip.ZipOutputStream  

/** 

 * 将文件夹下面的文件 

 * 打包成zip压缩文件 

 *  

 * @author admin 

 * 

 */  

public final class FileToZip {  

  

    private FileToZip(){}  

      

    /** 

     * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下 

     * @param sourceFilePath :待压缩的文件路径 

     * @param zipFilePath :压缩后存放路径 

     * @param fileName :压缩后文件的名称 

     * @return 

     */  

    public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){  

        boolean flag = false  

        File sourceFile = new File(sourceFilePath)  

        FileInputStream fis = null  

        BufferedInputStream bis = null  

        FileOutputStream fos = null  

        ZipOutputStream zos = null  

          

        if(sourceFile.exists() == false){  

            System.out.println("待压缩的文件目录:"+sourceFilePath+"不存在.")  

        }else{  

            try {  

                File zipFile = new File(zipFilePath + "/" + fileName +".zip")  

                if(zipFile.exists()){  

                    System.out.println(zipFilePath + "目录下存在名字为:" + fileName +".zip" +"打包文件.")  

                }else{  

                    File[] sourceFiles = sourceFile.listFiles()  

                    if(null == sourceFiles || sourceFiles.length<1){  

                        System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.")  

                    }else{  

                        fos = new FileOutputStream(zipFile)  

                        zos = new ZipOutputStream(new BufferedOutputStream(fos))  

                        byte[] bufs = new byte[1024*10]  

                        for(int i=0i<sourceFiles.lengthi++){  

                            //创建ZIP实体,并添加进压缩包  

                            ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName())  

                            zos.putNextEntry(zipEntry)  

                            //读取待压缩的文件并写进压缩包里  

                            fis = new FileInputStream(sourceFiles[i])  

                            bis = new BufferedInputStream(fis, 1024*10)  

                            int read = 0  

                            while((read=bis.read(bufs, 0, 1024*10)) != -1){  

                                zos.write(bufs,0,read)  

                            }  

                        }  

                        flag = true  

                    }  

                }  

            } catch (FileNotFoundException e) {  

                e.printStackTrace()  

                throw new RuntimeException(e)  

            } catch (IOException e) {  

                e.printStackTrace()  

                throw new RuntimeException(e)  

            } finally{  

                //关闭流  

                try {  

                    if(null != bis) bis.close()  

                    if(null != zos) zos.close()  

                } catch (IOException e) {  

                    e.printStackTrace()  

                    throw new RuntimeException(e)  

                }  

            }  

        }  

        return flag  

    }  

      

    public static void main(String[] args){  

        String sourceFilePath = "D:\\TestFile"  

        String zipFilePath = "D:\\tmp"  

        String fileName = "12700153file"  

        boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, fileName)  

        if(flag){  

            System.out.println("文件打包成功!")  

        }else{  

            System.out.println("文件打包失败!")  

        }  

    }  

      

}