平常整理的文件工具类,话不多说,直接上代码:
/** * 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的文件监控程序,它通过桌面式程序的方式实现,主要监控Windows系统下的文件目录变化,并提供对文件信息的采集和修改操作。 在讨论其设计和实现之前,有必要了解几个核心概念:文件处理、Java...
本文主要介绍了Java实现解析dcm医学影像文件并提取文件信息的方法,结合实例形式分析了Java基于第三方库文件针对dcm医学影像文件的解析操作相关实现技巧。下面将详细介绍该方法的实现步骤和相关知识点。 一、安装...
需要注意的是,本文所述的技术和方法都是基于Java Excel API的,读者需要具备一定的Java编程基础和excel文件处理经验。 keywords:Java Excel API,excel文件,操纵技术,应用,SSH,JSP,xl,电子文档。
"Java 实现利用 HTTP 基于 Servlet 上传文件至服务器" 文件上传概述 文件上传是指客户端将文件传输到服务器端的过程。...通过本文,读者可以了解 Java 实现文件上传的基本原理和方法,并应用于实际开发中。
本文将重点讲解Java日期的常用操作方法,主要基于提供的`JavaDateUtil.java`文件,假设这是一个自定义的日期工具类。 首先,我们来了解`java.util.Date`。这个类在早期的Java版本中被广泛使用,但它的API设计并不...
这些流类允许用户读取和写入文件,是文件操作的基本工具。 实现Java文件加密解密功能,需要对Java的安全机制有深入的理解,同时,也需要掌握加密算法的工作原理和编程实现方式。对程序员来说,这不仅能加深对Java...
在Java编程语言中,设计和...总结来说,基于Java的文件压缩与解压缩工具设计与实现涵盖了Java I/O操作、数据流处理、压缩库的使用、文件格式识别、用户交互设计以及软件测试等多个方面,是一个综合性的编程实践项目。
总之,基于Java开发的电子词典项目为初学者提供了一个实践面向对象编程、数据库操作、用户界面设计等技能的平台。通过这个项目,开发者不仅可以深入理解Java技术,还能锻炼到软件工程的完整流程,包括需求分析、设计...
《Java实用组件集》是一个包含了丰富功能的Java代码库,主要关注于文件操作这一核心功能。源码的分析和理解可以帮助开发者深入学习Java文件处理的技巧和最佳实践。在这个组件集中,你将发现一系列用于创建、读取、...
其中,FTP(文件传输协议)是最常用的一种文件传输方式之一。本篇文章将详细阐述如何利用Java编程语言实现本地文件上传至FTP服务器的功能。 #### 二、Java FTP编程基础 1. **FTP简介** - FTP是一种用于在网络上...
【标题】"毕业设计:基于Java的加油站信息管理系统"是一个以Java为核心技术的软件开发项目,旨在构建一个用于管理加油站日常运营的系统。这个系统利用了Model-View-Controller(MVC)架构模式,这是一种常见的软件...
首先,"ctjdfs"是基于Java开发的,这意味着它利用了Java的跨平台兼容性,可以在多种操作系统上运行。Java的面向对象特性使其能够设计出模块化的架构,方便维护和扩展。同时,Java丰富的库和API为开发分布式系统提供...
在Java编程环境中,FTP(File Transfer Protocol)是一种常用的文件传输协议,用于在网络上进行文件的上传和下载。本项目是利用Java实现一个FTP自动上传文件的功能,特别关注的是将整个磁盘的所有文件及其子目录上传...
《基于Java与协同过滤算法的电影推荐系统设计与实现》 在当今信息爆炸的时代,个性化推荐已经成为提升用户体验、增加用户粘性的重要手段。本项目旨在设计并实现一个基于Java编程语言和协同过滤算法的电影推荐系统,...
总的来说,基于Java的记事本功能设计与实现是一个全面了解和实践Java GUI编程的好机会。通过这个项目,开发者可以深入理解事件驱动编程、文件I/O操作以及GUI组件的使用,这些技能在开发复杂的桌面应用时都十分关键。...
Oracle课程设计—基于Java的学生成绩管理系统是一个典型的IT项目,涵盖了数据库管理和后端编程等多个技术领域。在这个项目中,学生通常会学习如何利用Oracle数据库存储和管理学生成绩,以及如何使用Java作为编程语言...