文件操作工具类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件操作工具类相关的知识,希望对你有一定的参考价值。

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();
	}
}

  

以上是关于文件操作工具类的主要内容,如果未能解决你的问题,请参考以下文章

在Android中,如何将数据从类传递到相应的布局/片段文件?

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

AWS S3工具类

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

文件操作的工具类