博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gzip文件内存解压后处理,再保存到文件
阅读量:6908 次
发布时间:2019-06-27

本文共 1337 字,大约阅读时间需要 4 分钟。

hot3.png

对于gz压缩文件,是gz,gz,gz,不是zip,不是gzip,不是rar, 对就是gz压缩文件的处理。

业务场景: 需要对gz压缩文件内存解压,并处理读取处理,之后再保存到存储介质上;非gz压缩文件做copy处理.

 

import (

    "bytes"
    "compress/gzip"
    "fmt"
    "io"
    "io/ioutil"
    "os"
    "strings"
)

//inFilename gz压缩文件全路径  outFilename输出的压缩文件全路径

func FixFileData(inFilename, outFilename string) error {

    w, err := os.Create(outFilename)
    if err != nil {
        fmt.Println("crate error:", err.Error())
        return err
    }
    defer w.Close()

    if strings.HasSuffix(inFilename, ".gz") { //处理压缩文件

        fr, err := os.Open(inFilename)
        if err != nil {
            return err
        }
        defer fr.Close()

        gzReader, err := gzip.NewReader(fr)

        if err != nil {
            return err
        }
        defer gzReader.Close()

        gzContext, err := ioutil.ReadAll(gzReader)

        if err != nil {
            return err
        }

        var writeContext bytes.Buffer

        writeContext.Reset()
        context := string(gzContext)
        conLines := strings.Split(context, "\n")
        for _, valueLine := range conLines {
            lineSplit := strings.Split(valueLine, columnSeparator)

            //业务处理

            valueLine = strings.Replace(valueLine, "old", "new", -1)

            writeContext.WriteString(valueLine + "\n")

        }

        writer := gzip.NewWriter(w)

        defer writer.Close()
        _, err = writer.Write(writeContext.Bytes())
        if err != nil {
            return err
        }
    } else {
        rc, err := os.Open(inFilename)
        if err != nil {
            return err
        }
        defer rc.Close()

        _, err = io.Copy(w, rc)

        if err != nil {
            return err
        }
    }

    return nil

}

转载于:https://my.oschina.net/koalaone/blog/1525275

你可能感兴趣的文章
APNS远程推送证书的申请和制作——详细解析
查看>>
android 学习笔记(八)android底层学习8.1 学习makefile 走读build/core/main.mk
查看>>
字体FONT
查看>>
java开发软件的安装
查看>>
JavaWeb 之邮件发送
查看>>
Java虚拟机 - 内存模型
查看>>
mysql常用操作
查看>>
PHP FastCGI进程管理器PHP-FPM的架构
查看>>
hbase源码系列(六)HMaster启动过程
查看>>
LeetCode(5) : Longest Palindromic Substring
查看>>
mysql 配置详解
查看>>
cell自适应网络图片大小
查看>>
decode()函数的简单使用
查看>>
第三次作业
查看>>
asf与vga视频为何无法同步播放?我来给你解释!
查看>>
H5----初识canvas
查看>>
Oracle PL/SQL学习之基础篇(1)
查看>>
深度学习500问,我觉得很不错
查看>>
关于nodejs的线程模型可以看这篇文章
查看>>
reactjs弹幕视频播放
查看>>