IO与文件读写---使用Apache commons IO简化文件读写

Apache Commons IO的FileUtils工具类提供了丰富的文件操作方法,包括创建、删除、复制、移动、读写、比较和过滤资源。其在性能上优于JDK自带的类,如forceMkdir用于创建目录,deleteQuietly进行无异常删除,copyDirectory和moveToDirectory实现文件或目录的移动和复制。此外,FileUtils支持以不同方式读写文件,如按字节数组、字符串或行读取,且提供文件内容比较和过滤功能。
摘要由CSDN通过智能技术生成
【一】Apache commons IO包之FileUtils

IO文件操作,可以说是除了JDBC操作之外,日常最常用的功能之一了。IO的读写方式如何,直接影响到系统的性能。很多时候系统的性能瓶颈往往不是出现在对象层面,而是出现在底层的IO层面上。

Apache commosn IO包在input, output包的基础上,提供了一个高效,方便的文件类处理工具:FileUtils,其功能涵盖了所有日常常用的IO操作,由于这个类的部分方法底层是基于Apache commons IO自己的读写流去实现的,所以在性能上会相对高于JDK自带的类(具体原因可以参考这篇文章:IO与文件读写---使用Apache commons io包提高读写效率)

根据Apache commons IO官方的说法,这个类可以提供如下功能:



总体上来说,主要有:

 ※ 资源的创建、删除
 ※ 资源的复制、移动
 ※ 资源的读写
 ※ 资源的比较
 ※ 资源的过滤
 ※ 资源的转换

【二】FileUtils的常用API及解析

①资源的创建、删除


 ※ 目录的创建: 
forceMkdir(File directory),这个方法可以在父目录不存在的情况下,连续创建多个目录。但如果同名的目录已经存在或者无权创建,则抛出异常

 ※ 文件的创建:
touch(File file),这个方法用于创建一个size为0的文件,然后迅速关闭输出流。如果文件已经存在则简单地修改一下文件的modify time

 ※ 目录/文件的删除:
void deleteDirectory(File directory),递归地删除目录及其下的所有内容。

boolean deleteQuietly(File file),相比于JDK的delete()方法有两个不同:首先它不需要被删除目录下的内容为空,其次它不会抛出任何IOException。

void forceDelete(File file),强行删除file对象,如果是目录对象则递归删除子目录。如果删除失败则显式地抛出IOException。

void forceDeleteOnExit(File file),当JVM退出时,把file对象删除。如果是目录对象则递归删除子目录。


②资源的复制、移动

 ※ 复制目录或文件
copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate),这个方法用于把源目录及其下面的子目录,文件一起拷贝到目标位置(名称可改)。而且该方法允许在拷贝的过程中进行过滤,指定仅拷贝那些符合条件的资源。最后一个选项用来表明是否保留文件原有的创建、修改日期还是使用最新的日期。

copyDirectoryToDirectory(File srcDir, File destDir),这个方法和上面的区别在于:首先上面的方法是拷贝到destDir的位置,而这个方法是拷贝到destDir“之下”的位置。其次上面的方法可以在拷贝的同时改名,这个方法不能,拷贝后仍然使用原来的名称。

copyFile(File srcFile, File destFile, boolean preserveFileDate),类似于上面的copyDirectory方法。

copyFileToDirectory(File srcFile, File destDir, boolean preserveFileDate),类似与上面的copyDirectoryToDirectory方法。

 ※ 移动目录或文件
moveToDirectory(File srcFile, File destDir, boolean createDestDir),这个方法用于移动一个文件或者目录到指定位置。

③资源的读写

这一部分是FileUtils的精华部分。

 ※ 读入文件
FileUtils支持对文件以字节数组,字符串,行的方式读入。对应方法分别是:

byte[] readFileToByteArray(File file) 
String readFileToString(File file) 
String readFileToString(File file, String encoding)
List readLines(File file)
List readLines(File file, String encoding) 


这里我们关心的是对于大文件,FileUtils是如何读入的?看看下面的源代码:
/**
     * Reads the contents of a file into a String.
     * The file is always closed.
     *
     * 
@param file  the file to read, must not be <code>null</code>
     * 
@param encoding  the encoding to use, <code>null</code> means platform default
     * 
@return the file contents, never <code>null</code>
     * 
@throws IOException in case of an I/O error
     * 
@throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
     
*/

    
public   static  String readFileToString(File file, String encoding)  throws  IOException  {
        InputStream in 
= null;
        
try {
            in 
= openInputStream(file);
            
return IOUtils.toString(in, encoding);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值