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");