java多文件生成tar

1.工具類

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;

import java.io.*;
import java.util.List;
import java.util.zip.GZIPOutputStream;

public class FileToTar {
    /**
     * 壓縮文件成Gzip格式,Linux上可使用
     * 壓縮文件夾生成後綴名爲".gz"的文件並下載
     * @param srcFiles,要壓縮的文件夾的路徑們
     * @param targzipFilePath,壓縮後文件的路徑
     * @param targzipFileName,壓縮後文件的名稱
     * @throws
     * */
    public static void CompressedFiles_Gzip(List<File> srcFiles, String targzipFilePath, String targzipFileName) {
            File[] files = new File[srcFiles.size()];
            int k = 0;
            int j = 0;
            String[] srcPath = new String[srcFiles.size()];
             for (File f : srcFiles) {
                 String path = f.getPath();
                File fi = new File(path);
                        srcPath[k++]=path;
                        files[j++]=fi;
            }
            int length = srcFiles.size();
            byte[] buf = new byte[1024]; //設定讀入緩衝區尺寸
            try {
                //建立壓縮文件輸出流
                FileOutputStream fout = new FileOutputStream(targzipFilePath);
                //建立tar壓縮輸出流
                TarArchiveOutputStream tout = new TarArchiveOutputStream(fout);
                for (int i = 0; i < length; i++) {
                    String filename = srcPath[i] ;
                    //打開需壓縮文件作爲文件輸入流
                    FileInputStream fin = new FileInputStream(filename);   //filename是文件全路徑
                    TarArchiveEntry tarEn = new TarArchiveEntry(files[i]); //此處必須使用new TarEntry(File file);
                    tarEn.setName(files[i].getName());  //此處需重置名稱,默認是帶全路徑的,否則打包後會帶全路徑
                    tout.putArchiveEntry(tarEn);
                    int num;
                    while ((num = fin.read(buf, 0, 1024)) != -1) {
                        tout.write(buf, 0, num);
                    }
                    tout.closeArchiveEntry();
                    fin.close();
                }
                tout.close();
                fout.close();

                //建立壓縮文件輸出流
                FileOutputStream gzFile = new FileOutputStream(targzipFilePath + ".gz");
                //建立gzip壓縮輸出流
                GZIPOutputStream gzout = new GZIPOutputStream(gzFile);
                //打開需壓縮文件作爲文件輸入流
                FileInputStream tarin = new FileInputStream(targzipFilePath);   //targzipFilePath是文件全路徑
                int len;
                while ((len = tarin.read(buf, 0, 1024)) != -1) {
                    gzout.write(buf, 0, len);
                }
                gzout.close();
                gzFile.close();
                tarin.close();

                File f = new File(targzipFilePath);
                //刪除tar
//                File targzFile= new File(targzipFileName);
//                targzFile.delete();

                f.deleteOnExit();
            } catch (FileNotFoundException e) {
                System.out.println(e);
            } catch (IOException e) {
                System.out.println(e);
            }
        }
}

2.實現

//file to tar
            String tarPath = ledContentPath + "/" + zipname + ".tar";
            FileToTar.CompressedFiles_Gzip(fileList,tarPath,zipname+".tar");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章