java压缩文件与删除文件的示例代码

压缩文件 :toZip(String srcDir, OutputStream out,boolean KeepDirStructure)

删除文件:deleteFolder(File folder)

/**
	 * 压缩成ZIP 方法1
	 *
	 * @param srcDir
	 *      压缩文件夹路径
	 * @param out
	 *      压缩文件输出流
	 * @param KeepDirStructure
	 *      是否保留原来的目录结构,true:保留目录结构;
	 *      false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
	 * @throws RuntimeException
	 *       压缩失败会抛出运行时异常
	 */
	protected void toZip(String srcDir, OutputStream out,
			boolean KeepDirStructure) throws RuntimeException {
		long start = System.currentTimeMillis();
		ZipOutputStream zos = null;
		try {
			zos = new ZipOutputStream(out);
			File sourceFile = new File(srcDir);
			compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);
			long end = System.currentTimeMillis();
			System.out.println("压缩完成,耗时:" + (end - start) + " ms");
		} catch (Exception e) {
			throw new RuntimeException("zip error from ZipUtils", e);
		} finally {
			if (zos != null) {
				try {
					zos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	/**
	 * 递归压缩方法
	 *
	 * @param sourceFile
	 *      源文件
	 * @param zos
	 *      zip输出流
	 * @param name
	 *      压缩后的名称
	 * @param KeepDirStructure
	 *      是否保留原来的目录结构,true:保留目录结构;
	 *      false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
	 * @throws Exception
	 */
	private static void compress(File sourceFile, ZipOutputStream zos,
			String name, boolean KeepDirStructure) throws Exception {
		byte[] buf = new byte[BUFFER_SIZE];
		if (sourceFile.isFile()) {
			// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
			zos.putNextEntry(new ZipEntry(name));
			// copy文件到zip输出流中
			int len;
			FileInputStream in = new FileInputStream(sourceFile);
			while ((len = in.read(buf)) != -1) {
				zos.write(buf, 0, len);
			}
			// Complete the entry
			zos.closeEntry();
			in.close();
		} else {
			File[] listFiles = sourceFile.listFiles();
			if (listFiles == null || listFiles.length == 0) {
				// 需要保留原来的文件结构时,需要对空文件夹进行处理
				if (KeepDirStructure) {
					// 空文件夹的处理
					zos.putNextEntry(new ZipEntry(name + "/"));
					// 没有文件,不需要文件的copy
					zos.closeEntry();
				}
			} else {
				for (File file : listFiles) {
					// 判断是否需要保留原来的文件结构
					if (KeepDirStructure) {
						// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
						// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
						compress(file, zos, name + "/" + file.getName(),
								KeepDirStructure);
					} else {
						compress(file, zos, file.getName(), KeepDirStructure);
					}
				}
			}
		}
	}
/**
	 * 删除文件夹
	 *
	 * @param folder
	 */
	protected void deleteFolder(File folder) {
		// 待删除文件路径
		String path = this.getClass().getResource("/").getPath().replace(
				"WEB-INF/classes/", "postFile/");
		if (folder.isDirectory()) {
			File[] files = folder.listFiles();
			for (int i = 0; i < files.length; i++) {
				deleteFolder(files[i]);
			}
			// 非当前目录,删除
			if (!folder.getAbsolutePath().equalsIgnoreCase(path)) {
//				// 只删除在7天前创建的文件
//				if (canDeleteFile(folder)) {
//					if (folder.delete()) {
//						System.out.println("文件夹" + folder.getName() + "删除成功!");
//					} else {
//						System.out.println("文件夹" + folder.getName()
//								+ "删除失败!此文件夹内的文件可能正在被使用");
//					}
//				}
				//只要是空的文件夹就删除不区分几天前创建
				if (folder.delete()) {
					System.out.println("文件夹" + folder.getName() + "删除成功!");
				} else {
					System.out.println("文件夹" + folder.getName()
							+ "删除失败!此文件夹内的文件可能正在被使用");
				}
			}
		} else {
			deleteFile(folder);
		}
	}
	/**
	 * 判断文件是否能够被删除
	 */
	protected boolean canDeleteFile(File file) {
		Date fileDate = getfileDate(file);
		Date date = new Date();
		long time = (date.getTime() - fileDate.getTime()) / 1000 / 60 / 60 / 24;// 当前时间与文件创建时间的间隔天数
		// 大于7天可删除,小于10天不删除
		if (time > 10) {
			return true;
		} else {
			return false;
		}
//		return true;
	}
	/**
	 * 获取文件最后的修改时间
	 *
	 * @param file
	 * @return
	 */
	protected Date getfileDate(File file) {
		long modifiedTime = file.lastModified();
		Date d = new Date(modifiedTime);
		return d;
	}
	/**
	 * 删除文件
	 *
	 * @param file
	 */
	protected void deleteFile(File file) {
		try {
			if (file.isFile()) {
				// 删除符合条件的文件
				if (canDeleteFile(file)) {
					if (file.delete()) {
						System.out.println("文件" + file.getName() + "删除成功!");
					} else {
						System.out.println("文件" + file.getName()
								+ "删除失败!此文件可能正在被使用");
					}
				} else {
				}
			} else {
				System.out.println("没有可以删除的文件了");
			}
		} catch (Exception e) {
			System.out.println("删除文件失败========");
			e.printStackTrace();
		}
	}

总结

到此这篇关于java压缩文件与删除文件的示例代码的文章就介绍到这了,更多相关java压缩文件与删除文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java 删除文件夹中的所有内容而不删除文件夹本身的实例

    实例如下: package com.xx; import java.io.File; public class Test { public static void main(String[] args) { String fileRoot = "C:/Users/xx/Desktop/xx/xxx"; delFolder(fileRoot); System.out.println("deleted"); } // // 删除完文件后删除文件夹 // // param

  • Java生成压缩文件的实例代码

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.

  • java生成压缩文件示例代码

    代码: 复制代码 代码如下: import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream; /**  * @project: Test  * @author

  • java删除文件和文件夹具体实现

    1,验证传入路径是否为正确的路径名(Windows系统,其他系统未使用)Java代码 复制代码 代码如下: // 验证字符串是否为正确路径名的正则表达式  private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";  // 通过 sPath.matches(matches) 方法的返回值判断是否正确  // sPath 为路径字符串 2,通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件

  • java 解压与压缩文件夹的实例详解

     java 解压与压缩文件夹的实例详解 注意:JDK7支持设置编码设置编码格式 zipFile,zipInputStream,zipOutputStream都增加了编码格式,如果是jdk1.6需要其他的包辅助 下面为自带jdk压缩文件夹代码: public void dozip(String srcfile, String zipfile) throws IOException { String temp = ""; File src = new File(srcfile); File

  • Java实现自动压缩文件并加密的方法示例

    本文实例讲述了Java实现自动压缩文件并加密的方法.分享给大家供大家参考,具体如下: 实现功能:自动压缩并加密 /** * * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则不进行加密保护 * @param srcFileName 待压缩文件路径 * @param zipFileName zip文件名 * @param password 加密密码 * @return * @throws

  • Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上传文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import sun.net

  • java实现创建临时文件然后在程序退出时自动删除文件

    通过java的File类创建临时文件,然后在程序退出时自动删除临时文件.下面将通过创建一个JFrame界面,点击创建按钮在当前目录下面创建temp文件夹且创建一个以mytempfile******.tmp格式的文本文件.代码如下: 复制代码 代码如下: import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; /**  * 功能: 创建临时文件(在指定的路径下)  */ public

  • java压缩文件与删除文件的示例代码

    压缩文件 :toZip(String srcDir, OutputStream out,boolean KeepDirStructure) 删除文件:deleteFolder(File folder) /** * 压缩成ZIP 方法1 * * @param srcDir * 压缩文件夹路径 * @param out * 压缩文件输出流 * @param KeepDirStructure * 是否保留原来的目录结构,true:保留目录结构; * false:所有文件跑到压缩包根目录下(注意:不保留

  • Java 批量文件压缩导出并下载到本地示例代码

    主要用的是org.apache.tools.zip.ZipOutputStream  这个zip流,这里以Execl为例子. 思路首先把zip流写入到http响应输出流中,再把excel的流写入zip流中(这里可以不用生成文件再打包,只需把execl模板读出写好数据输出到zip流中,并为每次的流设置文件名) 例如:在项目webapp下execl文件中 存在1.xls,2.xls,3.xls文件 1.Controller @RequestMapping(value = "/exportAll&qu

  • Java编程迭代地删除文件夹及其下的所有文件实例

    本文研究的是Java编程迭代地删除文件实例,具体实现代码如下. 实例代码: public static void main(String[] args) { String filePath = "c:" + File.separator +"b"; File file = new File(filePath); if (file.exists()) { if (file.isFile()) { deleteFile(filePath); } else { delet

  • python下解压缩zip文件并删除文件的实例

    利用python下载数据,下载下来的数据为zip格式,因为有上千个这样的文件,因此便直接在爬虫程序里加入了解压缩zip文件的内容,并且因为数据量较大,为了节省空间,便在解压缩后立即删除该zip文件. 先来介绍解压缩的方法: import zipfile filename = '/home/username/work/1.zip' fz = zipfile.ZipFile(filename, 'r') for file in fz.namelist(): fz.extract(file, path

  • java实现读取、删除文件夹下的文件

    java实现读取.删除文件夹下的文件 package test.com; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class ReadFile { public ReadFile() { } /** * 读取某个文件夹下的所有文件 */ public static boolean readfile(String filepath) throws Fi

  • Java多线程文件分片下载实现的示例代码

    多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下载后的数据组装成完整的数据文件,这样便大大加快了下载效率.常见的下载器,迅雷,QQ旋风等都采用了这种技术. 分片下载 所谓分片下载就是要利用多线程的优势,将要下载的文件一块一块的分配到各个线程中去下载,这样就极大的提高了下载速度. 技术难点 并不能说是什么难点,只能说没接触过不知道罢了. 1.如何请

  • Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html文件.可以直接打开,排版都还在. 看了下源码,是把日记存在一个json数组里了,图片还是在服务器,利用url访问,文字是在本地了. 但是想把图片下载到本地,然后和文字对应,哪篇日记下的哪些图片. 大概是如下的json数组. 大概有几百条,分别是头像.内容:文字||内容:图片.时间. 简单明了的jso

  • C++实现删除txt文件中指定内容的示例代码

    默认明白C++的文件输入输出流 方法: 新建一个中间文件,逐行读取原文件(test.txt)的内容并写入到中间文件(temp.txt),遇到需要删除的内容则跳过. 再将中间文件的内容写入原文件,删除中间文件. fstream in("C:\\Users\\Administrator\\Desktop\\test.txt", ios::in);//原文件 fstream out("C:\\Users\\Administrator\\Desktop\\temp.txt"

  • Java SpringBoot实现文件上传功能的示例代码

    测试代码 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org

  • java io文件操作删除文件或文件夹的7种方法

    目录 一.删除文件或文件夹的四种基础方法 二.如何删除整个目录或者目录中的部分文件 前提准备 2.1. walkFileTree与FileVisitor 2.2.Files.walk 2.3.传统IO-递归遍历删除文件夹 本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇 为了

随机推荐