三、Apache IO包

  • JDK中提供的文件操作相关的类,但是功能都非常基础,进行复杂操作时需要做大量编程工作。实际开发中,往往需要你自己动手编写相关的代码,尤其在遍历目录文件时,经常用到递归,非常繁琐。 Apache-commons工具包中提供了 IOUtils/FileUtils,可以让我们非常方便的对文件和目录进行操作。 本文就是让大家对 IOUtils/FileUtils 类有一个全面的认识,便于大家以后开发与文件和目录相关的功能。
  • ApacheIOUtils 和 FileUtils 类库为我们提供了更加简单、功能更加强大的文件操作和 IO流操作功能。非常值得大家学习和使用。

1、FileUtils的使用

FileUtils类中常用方法:
打开FileUtils 的 api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下:

方法

作用

cleanDirectory:

清空目录,但不删除目录。

contentEquals:

比较两个文件的内容是否相同。

copyDirectory:

将一个目录内容拷贝到另一个目录。可以通过 FileFilter过滤需要拷贝的文件。

copyFile:

将一个文件拷贝到一个新的地址。

copyFileToDirectory:

将一个文件拷贝到某个目录下。

copyInputStreamToFile:

将一个输入流中的内容拷贝到某个文件。

deleteDirectory:

删除目录。

deleteQuietly:

删除文件。

listFiles:

列出指定目录下的所有文件。

openInputSteam:

打开指定文件的输入流。

readFileToString:

将文件内容作为字符串返回。

readLines:

将文件内容按行返回到一个字符串数组中。

size:

返回文件或目录的大小。

write:

将字符串内容直接写到文件中。

writeByteArrayToFile:

将字节数组内容写到文件中。

writeLines:

将容器中的元素的 toString方法返回的内容依次写入文件中。

1.1、FileUtils的使用1

package com.copyFile;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class FileUtilsDemo1 {
    public static void main(String[] args)throws Exception {
        String conten =  FileUtils.readFileToString(new File("F:/IO测试/带行号的lxt.txt"));
        System.out.println(conten);
    }
}

1.2、FileUtils的使用2

package com.copyFile;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.FileFilter;

public class FileUtilsDemo2 {
    public static void main(String[] args)throws Exception {
        FileUtils.copyDirectory(new File("D:\\IDEA\\JavaSE\\基础语法\\src\\com\\IOStream\\a"), new File("f:/a"), new FileFilter() {
            //在文件拷贝时的过滤条件
            @Override
            public boolean accept(File pathname) {
                if(pathname.isDirectory() || pathname.getName().endsWith("gif")){
                    return true;
                }
                return false;
            }
        });
    }
}

结果图

java apache poi 格式生效 java中org.apache包_文本文件


1.3、IOUtils的使用

package com.copyFile;


import org.apache.commons.io.IOUtils;

import java.io.FileInputStream;

public class IOUtilsDemo {
    public static void main(String[] args)throws Exception {
        String content = IOUtils.toString(new FileInputStream("F:/IO测试/带行号的lxt.txt"),"utf-8");
        System.out.println(content);
    }
}

java apache poi 格式生效 java中org.apache包_字符串_02

四、IO流总结

按流的方向分类:

  • 输入流:数据源到程序(InputStream、Reader读进来)。
  • 输出流:程序到目的地(OutputStream、Writer写出去)。

按流的处理数据单元分类:

  • 字节流:按照字节读取数据(InputStream、OutputStream)。
  • 字符流:按照字符读取数据(Reader、Writer)。

按流的功能分类:

  • 节点流:可以直接从数据源或目的地读写数据。
  • 处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。

IO的四个基本抽象类:

一、InputStream的实现类
  1. FileInputStream(以字节为单位直接读取“文件”)
  2. ByteArrayInputStream(以字节为单位直接操作“字节数组对象”)
  3. BufferedInputStream (将InputStream对象进行包装,增加缓存功能,提高读取效率)
  4. DataInputStream (以字节为单位直接读取“基本数据类型与字符串类型”)
  5. ObjectInputStream (以字节为单位直接读取“对象”)
二、OutputStream
  1. FileOutputStream (以字节为单位直接写出“文件”)
  2. ByteArrayOutputStream (以字节为单位直接写出“字节数组对象”)
  3. BufferedOutputStream (将OutputStream对象进行包装,增加缓存功能,提高写出效率)
  4. DataOutputStream (以字节为单位直接写出“基本数据类型与字符串类型”)
  5. ObjectOutputStream (以字节为单位直接写出“对象”)
  6. PrintStream (将OutputStream进行包装,
  7. 可以方便地输出字符,更加灵活。)
三、Reader
  1. FileReader (以字符为单位直接读取“文本文件”(注意:只能读写文本文件!))
  2. BufferedReader (将Reader对象进行包装,增加缓存功能,提高读取效率!)
  3. InputStreamReader(处理流,将字节流转换成字符流读取)
四、Writer
  1. FileWriter (以字符为单位直接写出“文本文件”,注意:只能读写文本文件!)
  2. BufferedWriter (将Writer对象进行包装,增加缓存功能,提高写出效率!)
  3. OutputStreamWriter (处理流,将字节流转换成字符流输出)

把java对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为java对象的过程称为对象的反序列化。