欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于JAVA的常用文件操作方法 java文件 

程序员文章站 2022-07-02 14:28:31
...

平常整理的文件工具类,话不多说,直接上代码:

 

/**
 * FileUtil.java
 * Copyright ® 2011 窦海宁
 * All right reserved
 */

package org.aiyu.core.common.util.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.aiyu.core.common.util.CollectionUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;

/**
 * <p>文件工具类
 * 
 * <p>通用的文件工具类,可用于对文件进行一些常用的操作。
 * 
 * @author  窦海宁, chong0660@sina.com
 * @since   AiyuCommonCore-1.0
 * @version AiyuCommonCore-1.0
 */
public abstract class FileUtil {

	/** 文件类型 */
	public enum FileType {

		FILE       , //文件
		DIRECTORY;   //文件夹
	}

	//日志对象
	private static final Logger logger = Logger.getLogger(FileUtil.class);

	/**
	 * <p>创建临时文件路径名
	 * 
	 * @param  fileName 文件名
	 * 
	 * @return 导出文件路径名
	 * 
	 * @modify 窦海宁, 2014-05-04
	 */
	public static String createTempFileName(String fileName) {

		String tempFileName = null;

		if (StringUtils.isNotBlank(fileName)) {

			File rootPathFile = new File("..\\temp\\");

			try {

				tempFileName = FilenameUtils.concat(rootPathFile.getCanonicalPath() , FileUtil.getDatePath(DateTime.now()));

				FileUtils.forceMkdir(new File(tempFileName));

				tempFileName = FilenameUtils.concat(tempFileName ,  FileUtil.getDateFileName(fileName , DateTime.now()));
			} catch (IOException ex) {

				ex.printStackTrace();
			}
		}

		return tempFileName;
	}

	/**
	 * <p>获取指定时间对象对应的日期路径
	 * 
	 * @param  dateTime 时间对象
	 * 
	 * @return 与指定时间对象对应的日期路径,如传入日期为2012年10月25日,则输出结果为2012\10\25
	 * 
	 * @modify 窦海宁, 2014-05-07
	 */
	public static String getDatePath(DateTime dateTime) {

		String dateTypeValue = null;
		if (dateTime != null) {

			dateTypeValue = FilenameUtils.concat(dateTime.toString("yyyy") , dateTime.toString("MM"));
			dateTypeValue = FilenameUtils.concat(dateTypeValue , dateTime.toString("dd"));
		}
		return dateTypeValue;
	}

	/**
	 * <p>获取当前日期时间对象对应的文件名称(该方法仅在文件名末尾插入表示当前日期时间的字符串)
	 * 
	 * @param  fileName 文件名称
	 * @param  dateTime 文件创建时间,用于避免文件名重复
	 * 
	 * @return 与当前日期时间对象对应的文件名称,如文件名为D:\\Readme.doc、传入日期为2012年10月25日12点35分,则输出结果为Readme_20121025_1235.doc
	 * 
	 * @modify 窦海宁, 2014-05-07
	 */
	public static String getDateFileName(String fileName , DateTime dateTime) {

		String dateFileName = null;
		if (fileName != null) {

			String baseName = FilenameUtils.getBaseName(fileName);
			String extName  = FilenameUtils.getExtension(fileName);

			dateFileName = baseName + "_" + dateTime.toString("yyyyMMdd_hhmm") + "." + extName;
		}

		return dateFileName;
	}

	/**
	 * <p>删除指定路径文件
	 * 
	 * @param  filePath 文件路径
	 * 
	 * @modify 窦海宁, 2014-06-10
	 */
	public static void deleteFile(String filePath) {

		if (StringUtils.isNotBlank(filePath)) {

			File file = new File(filePath);
			if (file.exists()) {

				try {

					FileUtils.forceDelete(file);
				} catch (Exception ex) {

					ex.printStackTrace();
				}
			} else {

				FileUtil.logger.debug("FileUtil -> deleteFile : 与filePath对应的文件夹不存在");
			}
		} else {

			FileUtil.logger.debug("FileUtil -> deleteFile : filePath is null!");
		}
	}

	/**
	 * <p>从指定路径文件中加载参数对象
	 * 
	 * @param  filePath 文件路径
	 * 
	 * @return 加载后的参数对象
	 * 
	 * @modify 窦海宁, 2015-05-05
	 */
	public static Object loadObject(String filePath) throws Exception {

		Object value = null;
		if (StringUtils.isNotBlank(filePath)) {

			//从文件系统读取文件
			FileInputStream   fileInputStream   = null;
			ObjectInputStream objectInputStream = null;
			try {

				fileInputStream   = new FileInputStream(new File(filePath));
				objectInputStream = new ObjectInputStream(fileInputStream);

				value = objectInputStream.readObject();
			} catch (Exception ex) {

				ex.printStackTrace();
			} finally {

				IOUtils.closeQuietly(objectInputStream);
				IOUtils.closeQuietly(fileInputStream);
			}
		}

		return value;
	}

	/**
	 * <p>将参数对象保存至指定路径文件
	 * 
	 * @param  object        参数对象
	 * @param  directoryPath 文件路径
	 * @param  filename      文件名
	 * @param  appendDate    是否在文件名末尾追加日期
	 * 
	 * @modify 窦海宁, 2012-10-30
	 */
	public static void saveObject(Object object , String directoryPath , String filename , boolean appendDate) throws Exception {

		if (object != null && StringUtils.isNotBlank(directoryPath) && StringUtils.isNotBlank(filename)) {

			//将对象保存到文件系统
			FileUtils.forceMkdir(new File(directoryPath));

			String filePath = null;
			if (appendDate) {

				filePath = FilenameUtils.concat(directoryPath , FileUtil.getDateFileName(filename , DateTime.now()));
			}
			filePath = FilenameUtils.concat(directoryPath , filename);

			FileOutputStream   fileOutputStream   = null;
			ObjectOutputStream objectOutputStream = null;
			try {

				fileOutputStream   = new FileOutputStream(new File(filePath));
				objectOutputStream = new ObjectOutputStream(fileOutputStream);

				objectOutputStream.writeObject(object);
			} catch (Exception ex) {

				ex.printStackTrace();
			} finally {

				IOUtils.closeQuietly(objectOutputStream);
				IOUtils.closeQuietly(fileOutputStream);
			}
		}
	}

	/**
	 * <p>获取所有文件列表
	 * 
	 * @param  directoryFile 需要获取的文件列表所在的文件根路径对象
	 * 
	 * @return 指定的文件根路径下的所有文件列表(包括子文件夹)
	 * 
	 * @modify 窦海宁, 2016-01-05
	 */
	public static List getFileList(File directoryFile) {

		return FileUtil.getFileList(directoryFile , false);
	}

	/**
	 * <p>获取所有文件列表
	 * 
	 * @param  directoryFile 需要获取的文件列表所在的文件根路径对象
	 * @param  debug         是否输出调试信息
	 * 
	 * @return 指定的文件根路径下的所有文件列表(包括子文件夹)
	 * 
	 * @modify 窦海宁, 2016-01-05
	 */
	public static List getFileList(File directoryFile , boolean debug) {

		return FileUtil.getFileList(directoryFile , FileType.FILE , false , debug);
	}

	/**
	 * <p>获取所有文件夹列表
	 * 
	 * @param  directoryFile      需要获取的文件夹列表所在的文件根路径对象
	 * @param  isLastSubDirectory 是否只返回叶结点文件夹
	 * 
	 * @return 指定的文件根路径下的所有文件夹列表(包括子文件夹)
	 * 
	 * @modify 窦海宁, 2016-01-05
	 */
	public static List getDirectoryList(File directoryFile , boolean isLastSubDirectory) {

		return FileUtil.getFileList(directoryFile , FileType.DIRECTORY , isLastSubDirectory , false);
	}

	/**
	 * <p>获取所有文件夹列表
	 * 
	 * @param  directoryFile      需要获取的文件夹列表所在的文件根路径对象
	 * @param  isLastSubDirectory 是否只返回叶结点文件夹
	 * @param  debug              是否输出调试信息
	 * 
	 * @return 指定的文件根路径下的所有文件夹列表(包括子文件夹)
	 * 
	 * @modify 窦海宁, 2016-01-05
	 */
	public static List getDirectoryList(File directoryFile , boolean isLastSubDirectory , boolean debug) {

		return FileUtil.getFileList(directoryFile , FileType.DIRECTORY , isLastSubDirectory , debug);
	}

	/**
	 * <p>获取所有文件列表
	 * 
	 * @param  directoryFile      需要获取的文件列表所在的文件根路径对象
	 * @param  fileType           文件类型
	 * @param  isLastSubDirectory 是否只返回叶结点文件夹
	 * @param  debug              是否输出调试信息
	 * 
	 * @return 指定的文件根路径下的所有文件列表(包括子文件夹)
	 * 
	 * @modify 窦海宁, 2014-02-03
	 */
	protected static List getFileList(File directoryFile , FileType fileType , boolean isLastSubDirectory , boolean debug) {

		List fileList = new ArrayList();

		if (directoryFile != null && directoryFile.exists()) {

			File[] fileArray = directoryFile.listFiles();
			for (int i = 0 ; i < fileArray.length ; i++) {

				switch (fileType) {

				case FILE :

					if (fileArray[i].isDirectory()) {

						//处理文件夹
						fileList.addAll(FileUtil.getFileList(fileArray[i] , fileType , isLastSubDirectory , debug));
					} else {

						//处理文件
						if (debug) {

							try {

								FileUtil.logger.debug("FileUtil -> getFileList : add file : " + fileArray[i].getCanonicalPath());
							} catch (IOException ex) {

								ex.printStackTrace();
							}
						}

						fileList.add(fileArray[i]);
					}
					break;
				case DIRECTORY :

					if (fileArray[i].isDirectory()) {

						//处理文件夹
						List subDirectoryList = FileUtil.getFileList(fileArray[i] , fileType , isLastSubDirectory , debug);
						if (isLastSubDirectory) {

							if (CollectionUtil.isEmpty(subDirectoryList)) {

								if (debug) {

									try {

										FileUtil.logger.debug("FileUtil -> getFileList : add directory : " + fileArray[i].getCanonicalPath());
									} catch (IOException ex) {

										ex.printStackTrace();
									}
								}

								fileList.add(fileArray[i]);
							}
						} else {

							if (debug) {

								try {

									FileUtil.logger.debug("FileUtil -> getFileList : add directory : " + fileArray[i].getCanonicalPath());
								} catch (IOException ex) {

									ex.printStackTrace();
								}
							}

							fileList.add(fileArray[i]);
							fileList.addAll(subDirectoryList);
						}
					}
					break;
				}
			}
		} else {

			FileUtil.logger.debug("FileUtil -> getFileList : directoryFile is null!");
		}

		return fileList;
	}

}

 

相关标签: java 文件