`
conkeyn
  • 浏览: 1524791 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java gzip 备份 目录

    博客分类:
  • Java
阅读更多
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

//网上说使用ant.jar包中的类就可以解决中文问题,但我试了,一样是乱码!
//import org.apache.tools.zip.ZipEntry;
//import org.apache.tools.zip.ZipOutputStream;

public class Test {

	/** 拷贝(复制) */
	public static final int ACTION_COPY = 2;

	/** 压缩 */
	public static final int ACTION_GZIP = 1;

	public static void main(String[] args) throws Exception {

		String sourcePath = "C:\\Program Files\\MySQL\\MySQL Server 5.0\\data\\papazo";
		String aimPath = "C:\\papazo_data";
		List<String> filtDir = new ArrayList<String>();
		filtDir.add(".svn");
		List<String> filtFiles = new ArrayList<String>();
		filtFiles.add("Thumbs.db");
		backup(sourcePath, aimPath, filtDir, filtFiles, 1);
		// System.out.println(getSubDirectory(sourcePath, subsourcePath));
	}

	/**
	 * @param sourcePath
	 *            要备份的目录
	 * @param aimPath
	 *            存放备份的目录
	 * @param filtDir
	 *            要过滤的目录列表
	 * @param filtFiles
	 *            要过滤的文件列表
	 * @param actionType
	 *            执行备份类型 1:GZIP压缩方式,非1值为拷贝
	 * @throws Exception
	 */
	public static void backup(String sourcePath, String aimPath,
			List<String> filtDir, List<String> filtFiles, int actionType)
			throws Exception {
		SimpleDateFormat dateFormat = new SimpleDateFormat(
				"yyyy-MM-dd-hh-mm-ss");
		String datePath = dateFormat.format(new Date());
		switch (actionType) {
		case 1:
			aimPath = buildPath(aimPath);
			OutputStream os = new FileOutputStream(aimPath + datePath + ".zip");
			BufferedOutputStream bs = new BufferedOutputStream(os);
			ZipOutputStream zo = new ZipOutputStream(bs);
			deepGzipDir(sourcePath, sourcePath, zo, filtDir, filtFiles);
			zo.closeEntry();
			zo.close();
			break;
		default:
			deepCopyDir(sourcePath, aimPath + "/" + datePath + "/", filtDir,
					filtFiles);
			break;
		}
	}

	/**
	 * 压缩指定的目录,进行备份
	 * 
	 * @param sourcePath
	 *            要压缩的目录
	 * @param aimPath
	 *            目标目录(即存放备份的目录,备份文件按日期时间来生成.)
	 * @param gzipFileName
	 *            备份文件的文件名
	 * @param filtDir
	 *            过滤要备份的目录
	 * @param filtFiles
	 *            过滤要备份的文件
	 * @throws Exception
	 */
	public static void deepGzipDir(String sourcePath, String basePath,
			ZipOutputStream zo, List<String> filtDir, List<String> filtFiles)
			throws Exception {
		File inFile = new File(sourcePath);
		File[] files = null;
		if (inFile.isDirectory()) {
			// 是目录
			files = inFile.listFiles();
		} else if (inFile.isFile()) {
			// 是文件
			files = new File[1];
			files[0] = inFile;
		}
		byte[] buf = new byte[1024];
		int len;
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				if (filtDir != null && filtDir.size() > 0
						&& filtDir.contains(files[i].getName())) {// 过滤目录
					// 不对该名称的目录进行拷贝
					continue;
				}
				zo.putNextEntry(new ZipEntry(getSubDirectory(basePath, files[i]
						.getPath()
						+ "/"))); // 可以使空目录也放进去
				deepGzipDir(files[i].getPath(), basePath, zo, filtDir,
						filtFiles);
			} else {
				if (filtFiles != null && filtFiles.size() > 0
						&& filtFiles.contains(files[i].getName())) {// 过滤文件
					// 不对该名称的文件进行拷贝
					continue;
				}
				FileInputStream fin = new FileInputStream(files[i]);
				zo.putNextEntry(new ZipEntry(getSubDirectory(basePath, files[i]
						.getPath())));
				while ((len = fin.read(buf)) > 0) {
					zo.write(buf, 0, len);
				}
				fin.close();
			}
		}
	}

	/**
	 * @param root
	 *            根目录
	 * @param subDirectoryPath
	 *            子目录的全路径
	 * @return
	 * @throws Exception
	 */
	public static String getSubDirectory(String root, String subDirectoryPath)
			throws Exception {
		String subpath;
		root = root.replace("\\", "/");
		subDirectoryPath = subDirectoryPath.replace("\\", "/");
		subpath = subDirectoryPath.substring(root.length() + 1);
		return subpath;
	}

	/**
	 * 创建目录
	 * 
	 * @param path
	 * @return
	 * @throws Exception
	 */
	public static String buildPath(String path) throws Exception {
		if (!path.endsWith("/") && !path.endsWith("\\")) {
			path += "/";
		}
		File aim = new File(path);
		if (!aim.exists()) {// 不存在就创建目录
			aim.mkdirs();
		}
		return path;
	}

	/**
	 * @param sourcePath
	 *            源目录(要复制的目录)
	 * @param aimPath
	 *            目标目录,目标目录按日期时间来生成
	 * @throws Exception
	 */
	public static void deepCopyDir(String sourcePath, String aimPath,
			List<String> filtDir, List<String> filtFiles) throws Exception {
		File root = new File(sourcePath);
		File files[] = null;
		aimPath = buildPath(aimPath);
		String relativePath = "";
		if (root.isDirectory()) {
			files = root.listFiles();
			for (int i = 0; i < files.length; i++) {
				relativePath = files[i].getName();
				if (files[i].isDirectory()) {// 读取子目录
					if (filtDir != null && filtDir.size() > 0
							&& filtDir.contains(files[i].getName())) {// 过滤目录
						// 不对该名称的目录进行拷贝
						continue;
					}
					deepCopyDir(files[i].getPath(), aimPath + relativePath,
							filtDir, filtFiles);
				} else if (files[i].isFile()) {
					if (filtFiles != null && filtFiles.size() > 0
							&& filtFiles.contains(files[i].getName())) {// 过滤文件
						// 不对该名称的文件进行拷贝
						continue;
					}
					copyFile(files[i].getPath(), aimPath);
				}
			}
		} else if (root.isFile()) {
			copyFile(sourcePath, aimPath);
		}
	}

	/**
	 * 拷贝文件到指定的目录
	 * 
	 * @param sourcePath
	 *            要拷贝的文件,如:c:\\a.txt
	 * @param aimPath
	 *            目标目录,如:C:\\b或c:\\b\\
	 * @throws Exception
	 */
	public static void copyFile(String sourcePath, String aimPath)
			throws Exception {
		File inputFile = new File(sourcePath);
		String fileName = inputFile.getName();
		FileInputStream inputStream = new FileInputStream(inputFile);
		File outputFile = new File(aimPath);
		if (!outputFile.exists()) {
			outputFile.mkdirs();
		}
		if (!aimPath.endsWith("/") && !aimPath.endsWith("\\")) {
			aimPath += "/";
		}
		FileOutputStream outputStream = new FileOutputStream(aimPath + fileName);
		byte b[] = new byte[inputStream.available()];
		inputStream.read(b);
		outputStream.write(b);
		outputStream.flush();
		outputStream.close();
		inputStream.close();
	}
}

 

分享到:
评论
1 楼 jlusdy 2009-03-10  
你这是ZIP压缩
不是GZIP压缩啊

相关推荐

    mysqldump java远程备份mysql数据库 cmd备份

    3. **压缩备份**: 使用`| gzip`或`&gt; backup.sql.gz`可以在备份时直接压缩文件,节省存储空间。 4. **日志备份**: 如果需要备份二进制日志(binlog),可以加上`--master-data`选项。 5. **排除表**: 使用`--ignore-...

    Java备份后台数据库

    9. **压缩与加密**:备份文件可能非常大,为了节省存储空间和提高传输效率,可以使用Java的`java.util.zip`包对备份文件进行压缩(如ZIP或GZIP格式)。另外,为了保护数据安全,还可以对备份文件进行加密,Java提供...

    linux和windows上备份Mysql数据库java代码

    - **加密与压缩**:为了保护数据安全,备份文件可能需要进行加密处理,并且可以使用如gzip或zip进行压缩,减少存储空间。 综上所述,提供的Java代码片段实现了跨平台的MySQL数据库备份功能,结合了操作系统API调用...

    gzip相关资源

    10. **归档与备份**:在备份场景中,使用`tar`和`gzip`组合是常见做法,因为它可以将大量文件打包成一个可移动、可压缩的档案,便于存储和恢复。 11. **软件开发中的gzip**:在编程中,gzip常用于网络数据传输的...

    基于Java的实例源码-备份数据源.zip

    Java的java.util.zip包提供了GZIPOutputStream或ZipOutputStream类,可以用来对文件进行GZIP或ZIP压缩。 7. **日志记录**:为了追踪备份过程,良好的实践是记录备份操作的日志,包括开始时间、结束时间、成功/失败...

    java 解析 tar gz.rar

    在Java编程环境中,处理压缩文件如.tar.gz是常见的任务,特别是在数据传输、备份或软件部署等场景。`.tar`是一个打包文件格式,用于将多个文件和目录组合到一个单一的档案文件中,而`.gz`是Gzip压缩算法的扩展名,...

    jsp备份mysql数据库,用属性文件操作

    例如,`prop.properties`可能包含一个字段来指定备份文件保存的位置,或者一个开关来决定是否对备份文件进行gzip压缩以节省存储空间。 在实际应用中,为了保证数据一致性,可能还需要在备份开始前锁定表,或者使用...

    JAVA文件压缩与解压缩实践(源代码+论文)

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    hbase,mysql备份压缩springboot代码

    HBase支持在RegionServer级别启用压缩,同时备份时也可以使用gzip或bzip2等压缩工具。 接下来是MySQL,这是一个广泛使用的SQL关系型数据库。MySQL备份包括: 1. **mysqldump**:这是最常用的全量备份方法,通过...

    java解压缩文件文件夹

    在Java编程语言中,处理文件压缩与解压缩是常见的任务,尤其在数据传输、存储优化或者备份场景下。本文将详细讲解如何使用Java实现文件和文件夹的压缩以及解压缩功能。 首先,Java标准库提供了`java.util.zip`包,...

    java 压缩与解压缩 实例

    除了ZIP格式,Java还支持GZIP格式,这是另一种常见的压缩格式。`GZIPOutputStream`和`GZIPInputStream`可以用来实现GZIP压缩和解压缩。GZIP格式通常用于压缩单个文件,而不是多个文件的集合,因此其使用场景略有不同...

    MiGz是一个多线程gzip兼容的压缩和解压缩可作为Java库和命令行工具

    MiGz是一个专门为Java开发者设计的强大工具,它提供了一个高效且多线程的解决方案,用于进行gzip兼容的压缩和解压缩操作。作为一个独立于平台的Java库,MiGz可以在任何支持Java的环境中运行,这得益于Java的“一次...

    java解析tar文档

    Tar是一种在Unix和类Unix系统中广泛使用的打包工具,它可以将多个文件和目录打包成一个单一的归档文件,便于存储、备份和传输。在Java中处理tar文件,我们可以借助特定的库,比如题目中提到的javatar.jar包。 Java...

    mysql备份恢复工具

    总的来说,Java版的MySQL备份恢复工具为数据库管理员提供了便捷的备份和恢复解决方案,尤其适用于那些希望避免命令行操作或者需要在多台机器上快速部署的用户。正确使用这类工具,可以有效降低数据丢失的风险,确保...

    javazip压缩类

    7. **GZIPOutputStream 和 GZIPInputStream**: Java标准库还提供了处理GZIP格式的类,GZIPOutputStream用于压缩数据到GZIP文件,而GZIPInputStream则用于解压缩GZIP文件。虽然GZIP格式不支持多文件压缩,但它们在...

    JAVA组件集-源码

    Java内置了对ZIP和GZIP格式的支持,可以方便地实现文件或文件夹的压缩与解压缩。这在数据传输、备份和存储优化方面有着广泛的应用。 5. 绘制3D饼图、柱图、甘特图: Java的JavaFX和JFreeChart库提供了丰富的图表...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    在实际应用中,Java的压缩和解压缩功能广泛应用于数据备份、文件传输、软件安装包制作等领域。例如,开发Web应用程序时,可能会使用压缩技术来减少HTTP请求的大小,提高页面加载速度。在大数据处理中,压缩可以有效...

    JAVA开发JAVA文件压缩与解压缩实践(源代码+论文).zip

    在Java编程语言中,文件的压缩与解压缩是常见的任务,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本资源"JAVA开发JAVA文件压缩与解压缩实践(源代码+论文)"提供了一套完整的实践教程,包含了源代码实现和...

Global site tag (gtag.js) - Google Analytics