JAVA压缩文件
程序员文章站
2024-03-25 14:00:22
...
java中经常要对一些文件压缩
一 、导包
<!-- https://mvnrepository.com/artifact/org.apache.ant/ant -->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.7</version>
</dependency>
二、设置压缩文件格式
在类中定义缓存层和编码格式
private static byte[] _byte = new byte[1024];
private static final String ENCODE_UTF_8 = "UTF-8";
定义方法
/**
* 压缩文件和路径
* @param zip 压缩文件输出的地址 例如:D://test.zip
* @param srcFiles 要压缩的源文件集合
*/
public static void zipFile( String zip , List<File> srcFiles ){
try {
//判断是否为压缩后的文件后缀是否为.zip结尾
if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){
//创建压缩文件输出流
ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(new File(zip))) ;
//设置编码
_zipOut.setEncoding(ENCODE_UTF_8);
//迭代多个压缩文件
for( File _f : srcFiles ){
//执行压缩
zipFile(zip , _zipOut , _f , "");
}
_zipOut.close();
}else{
System.out.println("target file[" + zip + "] is not .zip type file");
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
三、递归确认压缩文件
因为一个文件夹中可能含有多个文件夹和文件所以每次都要去操作相应的文件和文件夹
/**
*
* @param zip 压缩文件输出的地址 例如:D://test.zip
* @param zipOut 被压缩后的输出流
* @param srcFile 被压缩的文件
* @param path 在zip中的相对路径
* @throws IOException
*/
private static void zipFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throws IOException{
System.out.println(" 开始压缩文件[" + srcFile.getName() + "]");
if( !"".equals(path) && ! path.endsWith(File.separator)){
path += File.separator ;
}
//测试此抽象路径名定义的文件或目录是否存在
if (!srcFile.exists()) {
System.out.println("压缩失败,文件或目录 " + srcFile + " 不存在!");
}else{
if( ! srcFile.getPath().equals(zip) ){
if( srcFile.isDirectory() ){//对象是否是文件夹false标识非文件夹
//listFiles能够获取当前文件夹下的所有文件和文件夹
//及比如我们创建了多层路径D:\压缩文件\压缩二层\压缩三层他可以得到
//D:\压缩文件(当前)\压缩二层(当前的下一层)
File[] _files = srcFile.listFiles() ;
if( _files.length == 0 ){
zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() + File.separator));
zipOut.closeEntry();
}else{
for( File _f : _files ){
//递归迭代下一层文件夹中的文件
zipFile( zip ,zipOut , _f , path + srcFile.getName() );
}
}
}else{
FileInputStream _in = new FileInputStream(srcFile) ;
//设置压缩路径
zipOut.putNextEntry(new ZipEntry(path + srcFile.getName()));
int len = 0 ;
while( (len = _in.read(_byte)) > 0 ){
zipOut.write(_byte, 0, len);
}
//关闭流
_in.close();
zipOut.closeEntry();
}
}
}
}
四、main方法测试
public static void main(String[] args) {
String zip = "D:\\练习压缩.zip";
List<File> files = new ArrayList<>();
File file = new File("D:\\压缩文件");
files.add(file);
zipFile(zip, files);
}
4.1创建对应文件目录1
只在三层下面创建文件
4.1.1执行结果
开始压缩文件[压缩文件]
开始压缩文件[压缩二层]
开始压缩文件[压缩三层]
开始压缩文件[三层下面的文件.txt]
对应压缩出的文件
4.2创建对应文件目录2
在二层同级创建文件和三层下面创建文件
4.2.1执行结果
开始压缩文件[压缩文件]
开始压缩文件[压缩二层]
开始压缩文件[压缩三层]
开始压缩文件[三层下面的文件.txt]
开始压缩文件[压缩二层文件.txt]
对应压缩出的文件
上一篇: 在阿里云centos上安装hexo
下一篇: 在Centos7中安装MySQL5.7