Compressed file - dry goods code sharing

1. Background

        Recently, the writing interface encountered the need to send files through the FTP server. The content of the file needs to be encrypted and compressed, so record it and provide the code that has passed the test.

2. Code

        

package com.example.demo.utils;

import lombok.extern.slf4j.Slf4j;

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

@Slf4j
public class GZipUtils {
    /**
    * compress the file
    * @param inBoundFilePath the file need to compress
    * @return the uncompressed file's absolute path
    * */
    public static String doCompressFile(String inBoundFilePath) {
        String newFileName;
        File zipFile;
        /*auto-closeable*/
        try(FileInputStream inputStream = new FileInputStream(inBoundFilePath);
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(new FileOutputStream(inBoundFilePath + ".gz"))){
            log.debug("... opening ...filepath{} ",inBoundFilePath);
            log.debug("... compressing ...");
            byte[] bytes = new byte[1024];
            int readLength ;
            int fileLength = 0;
            while(( readLength = inputStream.read(bytes)) > 0) {
                gzipOutputStream.write(bytes,0,fileLength);
                fileLength+=readLength;
            }
            gzipOutputStream.finish();
            gzipOutputStream.flush();
            log.debug("compress task finish");
            log.debug("original file size {}",fileLength);
            zipFile = new File(inBoundFilePath + ".gz");
            log.debug("compressed file size {}",zipFile.length());
        } catch (FileNotFoundException e) {
            log.error("filename:{} doesn't exists",inBoundFilePath);
            log.error(e.getMessage());
            return null;
        } catch (IOException e) {
            log.error(e.getMessage());
            return null;
        }

        /*reName the filename with file size suffix .It's required by the requirements doc */
        String fileLength = String.format("%08d",Integer.parseInt(String.valueOf(zipFile.length())));
        newFileName = inBoundFilePath + fileLength;
        if (reName(inBoundFilePath + ".gz",newFileName)){
            return newFileName;
        } else {
            log.error("error renaming");
            return null;
        }
    }
    /**
     * rename the file
     * @param absolutePathName the filename with absolute path prefix
     * @param newFilename renamed filename
     * @return boolean
     * */
    private static boolean reName(String absolutePathName,String newFilename) {
        File file = new File(absolutePathName);
        if (file.exists()) {
            return file.renameTo(new File(newFilename));
        }
        log.error("file doesn't exists ");
        return false ;
    }
}

test, a document

size

test class

 The test results are displayed on the console

Check the actual size of the compressed file

 After the decompression software is opened

Guess you like

Origin blog.csdn.net/Lee_92/article/details/131472090