java 把指定文件夹下的所有文件目录和文件都压缩到指定文件夹下

        java 把指定文件夹下的所有文件目录和文件都压缩到指定文件夹下

     这是一个完整的小程序,可以直接使用

package com.yangjf.service.impl;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

public class FileToPack {

	private  final Logger logger = Logger.getLogger(getClass());

	public static List<String> listFile = new ArrayList<String>();
	

	/**
	 * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
	 * (把指定文件夹下的所有文件目录和文件都压缩到指定文件夹下)
	 * @param sourceFilePath
	 *            :待压缩的文件路径
	 * @param zipFilePath
	 *            :压缩后存放路径
	 * @param fileName
	 *            :压缩后文件的名称
	 * @return
	 */
	public static  boolean fileToZip(String sourceFilePath,String zipFilePath, String fileName) {
		boolean flag = false;
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		getFile(sourceFilePath);
		try {
			File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
			if (zipFile.exists()) {
				System.out.println(zipFilePath + "目录下存在名字为:" + fileName
						+ ".zip" + "的打包文件.");
			} else { 
				if(!zipFile.exists()){
					zipFile.getParentFile().mkdirs();
				}
				fos = new FileOutputStream(zipFile);
				zos = new ZipOutputStream(new BufferedOutputStream(fos));
				byte[] bufs = new byte[1024 * 1024];
				for (int i = 0; i < listFile.size(); i++) {
					try {
						//创建ZIP实体,并添加进压缩包
						ZipEntry zipEntry = new ZipEntry(listFile.get(i));
						zos.putNextEntry(zipEntry);
						// 读取待压缩的文件并写进压缩包里
						fis = new FileInputStream(listFile.get(i));
						bis = new BufferedInputStream(fis, 1024 * 1024);
						int read = 0;
						while ((read = bis.read(bufs, 0, 1024 * 1024)) != -1) {
							zos.write(bufs, 0, read);
						}
					} catch (Exception e) {
						//logger.error("文件读取处理有误");
						e.printStackTrace();
					}
					
				}
				flag = true;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			// 关闭流
			try {
				if (null != bis)
					bis.close();
				if (null != zos)
					zos.close();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
		return flag;
	}

	public static void getFile(String path) {
		File file = new File(path);
		File[] tempList = file.listFiles();
		for (File f : tempList) {
			if (f.isFile()) {
				listFile.add(f.getPath());
				System.out.println(f.getPath());
				continue;
			}
			if (f.isDirectory()) {
				getFile(f.getPath());
			}
		}

	}

	public static void main(String[] args) {
		String sourceFilePath = "F:\\uploadT";
		String zipFilePath = "F:\\log";
		String fileName = "manyFileType01";
		fileToZip(sourceFilePath,zipFilePath, fileName);

	}

}


Java提供了ZipOutputStream和ZipEntry类来实现对文件夹指定文件压缩。 下面是一个示例代码,可以将指定文件夹下的txt文件压缩成一个zip文件: ```java import java.io.*; import java.util.zip.*; public class ZipSelectedFiles { public static void main(String[] args) throws Exception { String sourceFolderPath = "sourceFolder"; // 源文件夹路径 String zipFilePath = "target.zip"; // 压缩后的zip文件路径 FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zos = new ZipOutputStream(fos); File sourceFolder = new File(sourceFolderPath); addFilesToZip(sourceFolder, "", zos); zos.close(); fos.close(); System.out.println("文件压缩完成"); } private static void addFilesToZip(File file, String parentFolderName, ZipOutputStream zos) throws Exception { if (file.isDirectory()) { for (File subFile : file.listFiles()) { addFilesToZip(subFile, parentFolderName + "/" + file.getName(), zos); } } else { if (file.getName().endsWith(".txt")) { // 只压缩txt文件 ZipEntry zipEntry = new ZipEntry(parentFolderName + "/" + file.getName()); zos.putNextEntry(zipEntry); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } fis.close(); zos.closeEntry(); } } } } ``` 在这个示例中,我们使用了递归的方式将源文件夹中的所有txt文件都添加到了zip文件中。需要注意的是,只有满足条件的文件才会被添加到zip文件中,这里的条件是文件名以".txt"结尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值