文件压缩
文件压缩并判断是否加密
public class CreatePasswordProtectedZipExample {
public static void encrypt_zip ( String src_file, String dst_file, String encode) {
File file = new File ( src_file) ;
ZipParameters parameters = new ZipParameters ( ) ;
parameters. setCompressionMethod ( Zip4jConstants . COMP_DEFLATE) ;
parameters. setCompressionLevel ( Zip4jConstants . DEFLATE_LEVEL_NORMAL) ;
if ( encode != null ) {
parameters. setEncryptFiles ( true ) ;
parameters. setEncryptionMethod ( Zip4jConstants . ENC_METHOD_STANDARO) ;
parameters. setPassword ( encode. toCharArray) ;
}
try {
ZipFile zipFile = new ZipFile ( dst_file+ "" + src_file+ ".zip" ) ;
zipFile. setFileNameCharset ( "gb2312" ) ;
zipFile. addFolder ( file, parameters) ;
} catch ( ZipException e) {
e. printStackTrace ( ) ;
}
}
}
Java Zip 工具类
public class ZIPUtil {
public static void main( String[ ] args) {
//第一个参数是;第二个参数是压缩文件的目的路径,这边需要将名字加上去
compress( "需要压缩的源路径" ,"压缩的文件.zip" ) ;
}
/**s
* 压缩文件
* @param srcFilePath 压缩源路径
* @param destFilePath 压缩目的路径
*/
public static void compress( String srcFilePath, String destFilePath) {
//
File src = new File( srcFilePath) ;
if ( ! src.exists( )) {
throw new RuntimeException( srcFilePath + "不存在" ) ;
}
File zipFile = new File( destFilePath) ;
try {
FileOutputStream fos = new FileOutputStream( zipFile) ;
ZipOutputStream zos = new ZipOutputStream( fos) ;
String baseDir = "" ;
compressbyType( src, zos, baseDir) ;
zos.close( ) ;
} catch ( Exception e) {
// TODO Auto-generated catch block
e.printStackTrace( ) ;
}
}
/**
* 按照原路径的类型就行压缩。文件路径直接把文件压缩,
*/
private static void compressbyType( File src, ZipOutputStream zos,String baseDir) {
if ( ! src.exists( ))
return ;
System.out.println( "压缩路径" + baseDir + src.getName( )) ;
//判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法;
if ( src.isFile( )) {
//src是文件,调用此方法
compressFile( src, zos, baseDir) ;
} else if ( src.isDirectory( )) {
//src是文件夹,调用此方法
compressDir( src, zos, baseDir) ;
}
}
/**
* 压缩文件
*/
private static void compressFile( File file, ZipOutputStream zos,String baseDir) {
if ( ! file.exists( ))
return ;
try {
BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file)) ;
ZipEntry entry = new ZipEntry( baseDir + file.getName( )) ;
zos.putNextEntry( entry) ;
int count;
byte[ ] buf = new byte[ 1024 ] ;
while (( count = bis.read( buf)) != -1) {
zos.write( buf, 0 , count) ;
}
bis.close( ) ;
} catch ( Exception e) {
// TODO: handle exception
}
}
/**
* 压缩文件夹
*/
private static void compressDir( File dir, ZipOutputStream zos,String baseDir) {
if ( ! dir.exists( ))
return ;
File[ ] files = dir.listFiles( ) ;
if( files.length == 0 ) {
try {
zos.putNextEntry( new ZipEntry( baseDir + dir.getName( ) +File.separator)) ;
} catch ( IOException e) {
e.printStackTrace( ) ;
}
}
for ( File file : files) {
compressbyType( file, zos, baseDir + dir.getName( ) + File.separator) ;
}
}
}
提供文件流交给前端
public File outPutFile( HttpServletResponse response,String filepath,String filepathid) throwa IOException{
File file = new File( filepath+".zip" ) ;
BufferedInputStream br = new BufferedInputStream( new FileInputStream( file)) ;
byte[ ] buf = new byte[ 1024 ] ;
int len = 0 ;
response.reset( ) ; //非常重要
response.setContentType( "application/x-msdownload" ) ;
response.serHeader( "Content-Disposition" ,"attachment;filename=" +file.getName) ;
OutputStream out = response.getOutputStream( ) ;
while (( len = br.read( buf)) > 0 )
out.write( buf,0,len) ;
br.close( ) ;
out.close( ) ;
return file ;
}