基于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; } }