中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中使用tar.gz 包壓縮文件

發布時間:2021-05-13 16:20:46 來源:億速云 閱讀:552 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關怎么在Java中使用tar.gz 包壓縮文件,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

如何通過 Java 打包文件?

2.1 添加 Maven 依賴

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-compress</artifactId>
  <version>1.12</version>
</dependency>

2.2 打包核心代碼

通過 Apache compress 工具打包思路大致如下:

①:創建一個 FileOutputStream 到輸出文件(.tar.gz)文件。

②:創建一個GZIPOutputStream,用來包裝FileOutputStream對象。

③:創建一個TarArchiveOutputStream,用來包裝GZIPOutputStream對象。

④:接著,讀取文件夾中的所有文件。

⑤:如果是目錄,則將其添加到 TarArchiveEntry

⑥:如果是文件,依然將其添加到 TarArchiveEntry 中,然后還需將文件內容寫入 TarArchiveOutputStream 中。

接下來,直接上代碼:

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

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

/**
 * @author 犬小哈 (公眾號: 小哈學Java)
 * @date 2019-07-15
 * @time 16:15
 * @discription
 **/
public class TarUtils {

    /**
     * 壓縮
     * @param sourceFolder 指定打包的源目錄
     * @param tarGzPath 指定目標 tar 包的位置
     * @return
     * @throws IOException
     */
    public static void compress(String sourceFolder, String tarGzPath) throws IOException {
        createTarFile(sourceFolder, tarGzPath);
    }

    private static void createTarFile(String sourceFolder, String tarGzPath) {
        TarArchiveOutputStream tarOs = null;
        try {
            // 創建一個 FileOutputStream 到輸出文件(.tar.gz)
            FileOutputStream fos = new FileOutputStream(tarGzPath);
            // 創建一個 GZIPOutputStream,用來包裝 FileOutputStream 對象
            GZIPOutputStream gos = new GZIPOutputStream(new BufferedOutputStream(fos));
            // 創建一個 TarArchiveOutputStream,用來包裝 GZIPOutputStream 對象
            tarOs = new TarArchiveOutputStream(gos);
            // 若不設置此模式,當文件名超過 100 個字節時會拋出異常,異常大致如下:
            // is too long ( > 100 bytes)
            // 具體可參考官方文檔: http://commons.apache.org/proper/commons-compress/tar.html#Long_File_Names
            tarOs.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
            addFilesToTarGZ(sourceFolder, "", tarOs);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                tarOs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void addFilesToTarGZ(String filePath, String parent, TarArchiveOutputStream tarArchive) throws IOException {
        File file = new File(filePath);
        // Create entry name relative to parent file path
        String entryName = parent + file.getName();
        // 添加 tar ArchiveEntry
        tarArchive.putArchiveEntry(new TarArchiveEntry(file, entryName));
        if (file.isFile()) {
            FileInputStream fis = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(fis);
            // 寫入文件
            IOUtils.copy(bis, tarArchive);
            tarArchive.closeArchiveEntry();
            bis.close();
        } else if (file.isDirectory()) {
            // 因為是個文件夾,無需寫入內容,關閉即可
            tarArchive.closeArchiveEntry();
            // 讀取文件夾下所有文件
            for (File f : file.listFiles()) {
                // 遞歸
                addFilesToTarGZ(f.getAbsolutePath(), entryName + File.separator, tarArchive);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        // 測試一波,將 filebeat-7.1.0-linux-x86_64 打包成名為 filebeat-7.1.0-linux-x86_64.tar.gz 的 tar 包
        compress("/Users/a123123/Work/filebeat-7.1.0-linux-x86_64", "/Users/a123123/Work/tmp_files/filebeat-7.1.0-linux-x86_64.tar.gz");
    }

}

至于,代碼每行的作用,小伙伴們可以看代碼注釋,說的已經比較清楚了。

接下來,執行 main 方法,測試一下效果,看看打包是否成功:

怎么在Java中使用tar.gz 包壓縮文件

java基本數據類型有哪些

Java的基本數據類型分為:1、整數類型,用來表示整數的數據類型。2、浮點類型,用來表示小數的數據類型。3、字符類型,字符類型的關鍵字是“char”。4、布爾類型,是表示邏輯值的基本數據類型。

看完上述內容,你們對怎么在Java中使用tar.gz 包壓縮文件有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汾西县| 邳州市| 邵东县| 秦安县| 时尚| 平度市| 白玉县| 吉林市| 恩平市| 乐安县| 盐山县| 海口市| 托里县| 长岭县| 三原县| 海宁市| 淮滨县| 阳原县| 石狮市| 平远县| 云林县| 孝义市| 遂昌县| 浦城县| 长垣县| 郓城县| 汝城县| 肥西县| 偏关县| 吉林省| 桃园市| 安龙县| 湘阴县| 云霄县| 新乐市| 延长县| 卢氏县| 延边| 吉首市| 侯马市| 田阳县|