一、概念

JDK中提供的文件操作相关的类,但是功能都非常基础,进行复杂操作时需要做大量编程工作。实际开发中,往往需要

你自己动手编写相关的代码,尤其在遍历目录文件时,经常用到递归,非常繁琐。

Apache-commons工具包中提供了IOUtils/FileUtils,可以让我们非常方便的对文件和目录进行操作。

Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。

在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。 官方网址为:www.apache.org 。

很多著名的Java开源项目都来源于这个组织。比如:commons、kafka、lucene、maven、shiro、struts等技术,以及大数据技术中的

hadoop(大数据第一技术)、hbase、spark、storm、mahout等。

FieUtils类中常用方法的介绍

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

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

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

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

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

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

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

deleteDirectory:删除目录。

deleteQuietly:删除文件。

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

openInputSteam:打开指定文件的输入流。

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

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

size:返回文件或目录的大小。

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

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

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

writeStringToFile:将字符串内容写到文件中。

【代码示例】

 /**练习自己导入包jar包 commons-io 即通用IO jar包,别人造的轮子
*FieUtils类
*
*/
package cn.sxt.test; import java.io.File;
import java.nio.file.Files;
import java.util.Collection; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.FileFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.SuffixFileFilter; public class Test_0404_CommonsIO_FieUtils {
public static void main(String[] args) {
//文件的大小,直接用 新jar包中的FileUtils类的sizeOf方法
long len=FileUtils.sizeOf(new File("src.txt"));
System.out.println(len); //目录的大小 查看lib左边的lib目录
long len2=FileUtils.sizeOf(new File("lib"));
System.out.println(len2); //3、列出子孙集
File file=new File("dest");
//3-1 参数1:放个源文件夹 参数2:过滤器,保留哪一些东西 参数3:是否列出子孙集/null 表示只进行一层 把它们放在容器中去
//EmptyFileFilter.NOT_EMPTY:只要非空的 下边有个empty文件是空的0KB
Collection<File> files=FileUtils.listFiles(file, EmptyFileFilter.NOT_EMPTY, null);
for (File tempfile : files) {//遍历输出绝对路径, 只遍历dest下边的直系文件, 实际上里边的src文件夹还有东西
System.out.println(tempfile.getAbsolutePath());
}
System.out.println("-----------");
File file2=new File("dest");//DirectoryFileFilter 目录过滤 INSTANCE示例 操作子孙集的
Collection<File> files2=FileUtils.listFiles(file2, EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
//3-2、只输出文件后缀为.html的文件。 Suffix后缀。词尾
Collection<File> files3=FileUtils.listFiles(file2, new SuffixFileFilter("html"),
DirectoryFileFilter.INSTANCE);
//3-3、or的用法 既要.html的文件又要.jpg的文件
Collection<File> files4=FileUtils.listFiles(file2, FileFilterUtils.or(
new SuffixFileFilter("html"),new SuffixFileFilter("jpg") ),
DirectoryFileFilter.INSTANCE);
//3-4、我全都要 and的用法 既是txt文件又是空文件的
Collection<File> files5=FileUtils.listFiles(file2, FileFilterUtils.and(
new SuffixFileFilter("txt"),EmptyFileFilter.EMPTY ),
DirectoryFileFilter.INSTANCE); for (File tempfile : files5) {//遍历输出绝对路径, 遍历dest目录下的的所有东西
System.out.println(tempfile.getAbsolutePath());
} } }

IOUtils类中常用方法的介绍

1. buffer方法:将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小。

2. closeQueitly方法:关闭流。

3. contentEquals方法:比较两个流中的内容是否一致。

4. copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。

5. copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。

6. lineIterator方法:返回可以迭代每一行内容的迭代器。

7. read方法:将输入流中的部分内容读入到字节数组中。

8. readFully方法:将输入流中的所有内容读入到字节数组中。

9. readLine方法:读入输入流内容中的一行。

10. toBufferedInputStream,toBufferedReader:将输入转为带缓存的输入流。

11. toByteArray,toCharArray:将输入流的内容转为字节数组、字符数组。

12. toString:将输入流或数组中的内容转化为字符串。

13. write方法:向流里面写入内容。

14. writeLine方法:向流里面写入一行内容。

【代码示例】

 /**
*IOUtils 操作里边的内容
*
*/
package cn.sxt.test; import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; public class Test_0404_CommondIO_IOUtils {
public static void main(String[] args) throws IOException {
File file=new File("poem.txt");
//1、读取文件
String msg=FileUtils.readFileToString(file,"GBK");
System.out.println(msg); //2、看文件的大小
byte[] datas=FileUtils.readFileToByteArray(file);
System.out.println(datas.length); //3、逐行读取 放在容器中
List<String> mList=FileUtils.readLines(file,"GBK");
for (String tempString : mList) {
System.out.println(tempString);
} //4、写入 3种写法效果一样
File file2=new File("print.txt");
FileUtils.write(file2, "锦瑟无端五十弦,一弦一柱思华年。\r\n", "GBK",true);//使用GBK字符集,在文件后面追加
FileUtils.writeStringToFile(file2, "庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n","GBK",true);
FileUtils.writeByteArrayToFile(file2, "沧海月明珠有泪,蓝田日暖玉生烟。\r\n".getBytes("GBK"),true); List<String> dataList=new ArrayList<String>();
dataList.add("大江东去,浪淘尽,千古风流人物。");
dataList.add("故垒西边,人道是,三国周郎赤壁。");
dataList.add("乱石穿空,惊涛拍岸,卷起千堆雪。"); FileUtils.writeLines(file2, dataList,"---",true);//第3个参数是以上3个字符串的连接符,自定义 //5、单纯的复制文件
FileUtils.copyFile(new File("SongYi.jpg"),new File("Song2.jpg"));
//5-2、复制文件到指定目录
FileUtils.copyFileToDirectory(new File("SongYi.jpg"), new File("dest"));
//5-3、文件夹(包括所有子文件)的复制与 把a文件复制到b文件夹下
FileUtils.copyDirectory(new File("dest"), new File("dest_copy"));//复制一个dest文件夹,2个平级
FileUtils.copyDirectoryToDirectory(new File("dest"), new File("dest2"));//把dest文件夹复制到dest2目录下,当儿子去 //5-4、拷贝网络地址上一张图片
String url="https://www.baidu.com/img/dong_24ac35d79990cac4c1816710e2802ca0.gif";
FileUtils.copyURLToFile(new URL(url), new File("QingMing.gif")); //5-5、复制网站的源码
String data2=IOUtils.toString(new URL("http://www.baidu.com"),"UTF-8");
System.out.println(data2);
} }

[19/04/04-星期四] IO技术_CommonsIO(通用IO,别人造的轮子,FileUtils类 操作文件 & IOUtilsl类 操作里边的内容 )的更多相关文章

  1. [19/03/29-星期五] IO技术_File(文件)类(可操作文件,不能操作其里边内容,位于Java.io 包中)&递归遍历

    一.概念 java.io.File类:代表文件和目录. 在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类. 以pathname为路径创建File对象,如果pathname是相对路 ...

  2. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  3. Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  4. IO流——File类(文件流类)

    java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...

  5. (转)Linux Network IO Model、Socket IO Model - select、poll、epoll

    Linux Network IO Model.Socket IO Model - select.poll.epoll  原文:https://www.cnblogs.com/LittleHann/p/ ...

  6. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  7. Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

    IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...

  8. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  9. [19/04/01-星期一] IO技术_字节流分类总结(含字节数组(Array)流、字节数据(Data)流、字节对象(Object)流)

    一.字节流分类概括 -->1.ByteArrayInputStream /ByteArrayOutputStream(数组字节输入输出)        InputStream/OutputStr ...

随机推荐

  1. Timer 控件

    1. 设置属性 Enable = true  或调用 start方法后, *_Tick 方法不会立即执行,会先等待一个时间间隔 2.timer1不管你上次的事情是否做完,它都会每个一个时间间隔做它应该 ...

  2. moment常用操作

    1.返回当前日期截止时的时间戳: post.createtime = moment().unix(); let stime = moment(moment.unix(moment().unix()). ...

  3. django常用封装

    #encoding:utf-8from django.shortcuts import render_to_responseimport hashlibfrom binascii import b2a ...

  4. SpringCloud实战之初级入门(二)— 服务注册与服务调用

    目录 1.环境介绍 2.服务提供 2.1 创建工程 2.2 修改配置文件 2.3 修改启动文件 2.5 亲测注意事项 3.服务调用 3.1 创建工程 3.2 修改配置文件 3.3 修改启动文件 3.4 ...

  5. C为什么不能跨平台

    如果大家能对我的文章推荐一下,关注一下本人博客,那就更开心了,我今后也会更多的写一些计算机系统/原理类的文章,以飨各位读者.再次谢谢.前段时间看了 周志明的那本 <深入理解java虚拟机> ...

  6. oracle 基础笔记

    sqlplus / as sysbda;-- 运行命令conn scott/tiger [as sysdba];-- 登录show user;查看当前用户alter user scott accoun ...

  7. html注册表

    这是第一次使用html写一个简单的注册表(有不对的地方希望大家可以帮我指出来谢谢

  8. Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

     PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...

  9. 实验三:klee的执行重现机制(示例分析)

    结论性内容: (1)如果是在程序中使用klee_make_symbolic,则可以使用下列脚本进行重现. export LD_LIBRARY_PATH=/home/klee/xiaojiework/k ...

  10. java 从网上下载文件的几种方式

    package com.github.pandafang.tool; import java.io.BufferedOutputStream; import java.io.File; import ...