`
令狐冲0660
  • 浏览: 15135 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

 

/**
 * 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文件上传

    在Java编程语言中,文件上传是一项常见的功能...以上就是基于Java的文件上传涉及的主要技术点,涵盖了从客户端请求到服务器处理的整个流程。通过理解并熟练掌握这些知识点,开发者能够创建出高效、安全的文件上传功能。

    基于java的文件分割器源码

    本篇文章将详细探讨基于Java的文件分割器和合并器的实现原理、相关知识点以及源码解析。 首先,文件分割是在大文件处理时常用的一种技术。当一个文件过大,无法一次性读取或者传输时,可以将其分割成多个小文件进行...

    基于java的图片文件格式转换和线性缩放

    ### 基于Java的图片文件格式转换与线性缩放技术详解 #### 一、引言 在当今数字化时代,图像处理技术是信息技术领域的一个重要组成部分。图像处理包括多种操作,如格式转换、图像缩放等。这些操作在很多应用中都至...

    Java实现解析dcm医学影像文件并提取文件信息的方法示例

    本文主要介绍了Java实现解析dcm医学影像文件并提取文件信息的方法,结合实例形式分析了Java基于第三方库文件针对dcm医学影像文件的解析操作相关实现技巧。下面将详细介绍该方法的实现步骤和相关知识点。 一、安装...

    基于java的文件监控程序设计与实现.pdf

    本文介绍的基于Java的文件监控程序,它通过桌面式程序的方式实现,主要监控Windows系统下的文件目录变化,并提供对文件信息的采集和修改操作。 在讨论其设计和实现之前,有必要了解几个核心概念:文件处理、Java...

    基于Java Excel API的excel文件的操纵技术及其应用.pdf

    需要注意的是,本文所述的技术和方法都是基于Java Excel API的,读者需要具备一定的Java编程基础和excel文件处理经验。 keywords:Java Excel API,excel文件,操纵技术,应用,SSH,JSP,xl,电子文档。

    java实现利用HTTP基于servlet上传文件至服务器.pdf

    "Java 实现利用 HTTP 基于 Servlet 上传文件至服务器" 文件上传概述 文件上传是指客户端将文件传输到服务器端的过程。...通过本文,读者可以了解 Java 实现文件上传的基本原理和方法,并应用于实际开发中。

    Java日期常用操作方法工具类

    本文将重点讲解Java日期的常用操作方法,主要基于提供的`JavaDateUtil.java`文件,假设这是一个自定义的日期工具类。 首先,我们来了解`java.util.Date`。这个类在早期的Java版本中被广泛使用,但它的API设计并不...

    基于JAVA的文件加密解密.pdf

    这些流类允许用户读取和写入文件,是文件操作的基本工具。 实现Java文件加密解密功能,需要对Java的安全机制有深入的理解,同时,也需要掌握加密算法的工作原理和编程实现方式。对程序员来说,这不仅能加深对Java...

    基于JAVA的文件压缩与解压缩工具设计与实现

    在Java编程语言中,设计和...总结来说,基于Java的文件压缩与解压缩工具设计与实现涵盖了Java I/O操作、数据流处理、压缩库的使用、文件格式识别、用户交互设计以及软件测试等多个方面,是一个综合性的编程实践项目。

    基于java语言开发的电子词典

    总之,基于Java开发的电子词典项目为初学者提供了一个实践面向对象编程、数据库操作、用户界面设计等技能的平台。通过这个项目,开发者不仅可以深入理解Java技术,还能锻炼到软件工程的完整流程,包括需求分析、设计...

    java实用组件集 源码 文件操作组件

    《Java实用组件集》是一个包含了丰富功能的Java代码库,主要关注于文件操作这一核心功能。源码的分析和理解可以帮助开发者深入学习Java文件处理的技巧和最佳实践。在这个组件集中,你将发现一系列用于创建、读取、...

    java上传文件到ftp.txt

    其中,FTP(文件传输协议)是最常用的一种文件传输方式之一。本篇文章将详细阐述如何利用Java编程语言实现本地文件上传至FTP服务器的功能。 #### 二、Java FTP编程基础 1. **FTP简介** - FTP是一种用于在网络上...

    毕业设计:基于java的加油站信息管理系统

    【标题】"毕业设计:基于Java的加油站信息管理系统"是一个以Java为核心技术的软件开发项目,旨在构建一个用于管理加油站日常运营的系统。这个系统利用了Model-View-Controller(MVC)架构模式,这是一种常见的软件...

    一个java实现的分布式文件存储系统,可以实现文件分布存储在不同的服务器中,进行上传、下载、删除

    首先,"ctjdfs"是基于Java开发的,这意味着它利用了Java的跨平台兼容性,可以在多种操作系统上运行。Java的面向对象特性使其能够设计出模块化的架构,方便维护和扩展。同时,Java丰富的库和API为开发分布式系统提供...

    java实现ftp自动上传文件

    在Java编程环境中,FTP(File Transfer Protocol)是一种常用的文件传输协议,用于在网络上进行文件的上传和下载。本项目是利用Java实现一个FTP自动上传文件的功能,特别关注的是将整个磁盘的所有文件及其子目录上传...

    基于Java与协同过滤算法的电影推荐系统设计与实现

    《基于Java与协同过滤算法的电影推荐系统设计与实现》 在当今信息爆炸的时代,个性化推荐已经成为提升用户体验、增加用户粘性的重要手段。本项目旨在设计并实现一个基于Java编程语言和协同过滤算法的电影推荐系统,...

    基于java的记事本功能的设计与实现

    总的来说,基于Java的记事本功能设计与实现是一个全面了解和实践Java GUI编程的好机会。通过这个项目,开发者可以深入理解事件驱动编程、文件I/O操作以及GUI组件的使用,这些技能在开发复杂的桌面应用时都十分关键。...

    oracle课程设计—基于java的学生成绩管理系统

    Oracle课程设计—基于Java的学生成绩管理系统是一个典型的IT项目,涵盖了数据库管理和后端编程等多个技术领域。在这个项目中,学生通常会学习如何利用Oracle数据库存储和管理学生成绩,以及如何使用Java作为编程语言...

Global site tag (gtag.js) - Google Analytics