一、概念

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. SailingEase .NET Resources Tool (.NET 多语言资源编辑器)转

    转自:http://www.cnblogs.com/sheng_chao/p/5958846.html 软件下载链接 痛点: 通常我们为了让软件支持多语言,会使用 .NET 自带的资源文件来存储不同的 ...

  2. Flash流媒体服务器软件

    所谓流媒体技术,是指将连续的影像和声音信息经过压缩处理后放在网站服务器上,让用户能够一边下载一边观看.收听(即所谓的“在线欣赏”),而不需要等整个压缩文件下载到自己的机器上才可以欣赏的网络传输技术.目 ...

  3. json转化的时候如何忽略某些属性字段值

    一.有时候在将对象或list对象转化为json的时候,我们可能不需要所有的属性值,这就需要我们去过滤掉这些属性了 我下面说两种比较流行的json包如何来忽略某些属性值 二. 使用jaskson包 1. ...

  4. thrift简介

    thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...

  5. div 旋转

    -webkit-transform:rotate(120deg); -moz-transform:rotate(120deg); -o-transform:rotate(120deg); /* fil ...

  6. JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function

    html +css 静态页面 js     动态 交互   原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...

  7. Android fastjson

    Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打,支持JDK的各种类型 ...

  8. 【Machine Learning】训练集 验证集 测试集区别

    最近在Udacity上学习Machine learning课程,对于验证集.测试集和训练集的相关概念有些模糊.故整理相关资料如下. 交叉检验(Cross Validation) 在数据分析中,有些算法 ...

  9. GreenDao 初体验

    GreenDao 使用 环境搭建(android studio) project的build.gradle buildscript { repositories { google() jcenter( ...

  10. Unity资源管理机制

    转载:https://unity3d.com/learn/tutorials/topics/best-practices/assets-objects-and-serialization Assets ...