文件操作工具类

package utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * 文件操作工具类
 *
 * @author mickkong
 *
 */
public class FileUtil {

	/**
	 * 移动文件或者文件夹
	 *
	 * @param oldPath
	 *            源路径
	 * @param newPath
	 *            新路径
	 * @throws IOException
	 */
	public static void moveTo(String oldPath, String newPath) throws IOException {
		copyFile(oldPath, newPath);
		deleteFile(oldPath);
	}

	/**
	 * 删除文件或者文件夹
	 *
	 * @param filePath
	 *            文件路径
	 */
	public static void deleteFile(String filePath) {
		File file = new File(filePath);
		if (!file.exists()) {
			return;
		}
		if (file.isDirectory()) {
			File[] list = file.listFiles();

			for (File f : list) {
				deleteFile(f.getAbsolutePath());
			}
		}
		file.delete();
	}

	/**
	 * 复制 文件或者文件夹
	 *
	 * @param oldPath
	 *            源路径
	 * @param newPath
	 *            新路径
	 * @throws IOException
	 */
	public static void copyFile(String oldPath, String newPath) throws IOException {
		System.out.println("copy file from [" + oldPath + "] to [" + newPath + "]");

		File oldFile = new File(oldPath);
		if (oldFile.exists()) {

			if (oldFile.isDirectory()) { // 如果是文件夹
				File newPathDir = new File(newPath);
				newPathDir.mkdirs();
				File[] lists = oldFile.listFiles();
				if (lists != null && lists.length > 0) {
					for (File file : lists) {
						copyFile(file.getAbsolutePath(), newPath.endsWith(File.separator) ? newPath + file.getName()
								: newPath + File.separator + file.getName());
					}
				}
			} else {
				InputStream inStream = new FileInputStream(oldFile); // 读入原文件
				FileOutputStream fs = new FileOutputStream(newPath);
				write2Out(inStream, fs);
				inStream.close();
			}
		}
	}

	/**
	 * 重命名文件
	 *
	 * @param file
	 *            文件
	 * @param name
	 *            新文件名
	 * @return
	 */
	public static File renameFile(File file, String name) {
		String fileName = file.getParent() + File.separator + name;
		File dest = new File(fileName);
		file.renameTo(dest);
		return dest;
	}

	/**
	 * 压缩多个文件
	 *
	 * @param zipFileName
	 *            压缩输出文件名
	 * @param files
	 *            需要压缩的文件
	 * @return
	 * @throws Exception
	 */
	public static File createZip(String zipFileName, File... files) throws Exception {
		File outFile = new File(zipFileName);
		ZipOutputStream out = null;
		BufferedOutputStream bo = null;
		try {
			out = new ZipOutputStream(new FileOutputStream(outFile));
			bo = new BufferedOutputStream(out);

			for (File file : files) {
				zip(out, file, file.getName(), bo);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bo.close();
			} finally {
				out.close();
			}
		}
		return outFile;
	}

	/**
	 * 压缩单个文件
	 *
	 * @param zipFileName
	 *            压缩输出文件名
	 * @param inputFile
	 *            需要压缩的文件
	 * @return
	 * @throws Exception
	 */
	public static File createZip(String zipFileName, File inputFile) throws Exception {
		File outFile = new File(zipFileName);
		ZipOutputStream out = null;
		BufferedOutputStream bo = null;
		try {
			out = new ZipOutputStream(new FileOutputStream(outFile));
			bo = new BufferedOutputStream(out);
			zip(out, inputFile, inputFile.getName(), bo);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bo.close();
			} finally {
				out.close();
			}
		}
		return outFile;
	}

	private static void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo) throws Exception { // 方法重载
		if (f.isDirectory()) {
			File[] fl = f.listFiles();
			if (fl == null || fl.length == 0) {
				out.putNextEntry(new ZipEntry(base + "/")); // 创建创建一个空的文件夹
			} else {
				for (int i = 0; i < fl.length; i++) {
					zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹
				}
			}

		} else {
			out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入 base 文件
			System.out.println(base);
			BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f));

			try {
				write2Out(bi, out);
			} catch (IOException e) {
			} finally {
				bi.close();
			}
		}
	}

	private static void write2Out(InputStream input, OutputStream out) throws IOException {
		byte[] b = new byte[1024];
		int c = 0;
		while ((c = input.read(b)) != -1) {
			out.write(b, 0, c);
			out.flush();
		}
		out.flush();
	}
}

  

时间: 2024-10-05 18:00:36

文件操作工具类的相关文章

FileUtils.java 本地 文件操作工具类

package Http; import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException; /** * * 本地文件操作工具类 *保存文本 *保存图片 * Created by lxj-pc on 2017/6/27. */public class FileUtils { public static void saveText(String cont

Code片段 : .properties属性文件操作工具类 &amp; JSON工具类

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 java.util.Properties 是一个属性集合.常见的api有如下: load(InputStream inStream)  从输入流中读取属性 getProperty(String key)  根据key,获取属性值 getOrDefault(Object key, V defaultValue)

Java IO(文件操作工具类)

FileOperate实现的功能: 1. 返回文件夹中所有文件列表 2. 读取文本文件内容 3. 新建目录 4. 新建多级目录 5. 新建文件 6. 有编码方式的创建文件 7. 删除文件 8. 删除指定文件夹下所有文件 9. 复制单个文件 10. 复制整个文件夹的内容 11. 移动文件 12. 移动目录 13. 建立一个可以追加的bufferedwriter 14. 得到一个bufferedreader Java代码    package utils; import java.io.Buffer

AIR中方便的文件操作工具类

最近做项目用到了air 需要随时读写文件,所以封装了一个工具类,在此记录,方便自己和他人日后使用. FileUtils.as代码: 1 ///////////////////////////////////////////////////////////////////////////////////////// 2 // TXIEJUN Confidential 3 // Copyright 2014. All rights reserved. 4 // 5 // FileUtils.as 6

java实现简单文件操作工具类

本篇带来关于文件操作的简单工具类,包括文件夹创建,文件夹删除,文件创建,文件重命名,文件复制,文件删除.如果需要文件夹复制,其实就是创建文件夹和复制文件的操作.下面直接上代码 package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.Fil

小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper

文件操作是非常通用的,注释都写在源代码中了,不多说~需要特别说明的是,任务的异步执行和IOperationProgressListener.拷贝和删除等操作,是比较费时的,采用了异步执行的方式~ Android异步执行,我也是初次了解,在CSDN上找了一篇文章,后续写个单独的例子,单独写1篇介绍.http://blog.csdn.net/xufenghappy6/article/details/7343899异步执行+事件通知 是一种比较流行的模式,比同步等待很多时候要好. 另外,特别需要说明的

C#文件操作工具类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ReadLog.Public { public class FileHelper { string[] format = { "*.jpg", "*.doc", "*.exe", "*.pdf", &qu

Android文件操作工具类(转)

Android文件操作工具类(转) 2014/4/3 18:13:35  孤独的旅行家  博客园 这个工具类包含Android应用开发最基本的几个文件操作方法,也是我第一次发博客与大家分享自己写的东西. 如果有什么补充或修改,欢迎大家提出宝贵的建议. import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;impo

文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.

FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.Fi