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