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

一、概念

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:将字符串内容写到文件中。

【代码示例】

 1 /**练习自己导入包jar包 commons-io 即通用IO jar包,别人造的轮子
 2 *FieUtils类
 3  *
 4  */
 5 package cn.sxt.test;
 6
 7 import java.io.File;
 8 import java.nio.file.Files;
 9 import java.util.Collection;
10
11 import org.apache.commons.io.FileUtils;
12 import org.apache.commons.io.filefilter.DirectoryFileFilter;
13 import org.apache.commons.io.filefilter.EmptyFileFilter;
14 import org.apache.commons.io.filefilter.FileFileFilter;
15 import org.apache.commons.io.filefilter.FileFilterUtils;
16 import org.apache.commons.io.filefilter.SuffixFileFilter;
17
18
19 public class Test_0404_CommonsIO_FieUtils {
20     public static void main(String[] args) {
21         //文件的大小,直接用 新jar包中的FileUtils类的sizeOf方法
22         long len=FileUtils.sizeOf(new File("src.txt"));
23         System.out.println(len);
24
25         //目录的大小 查看lib左边的lib目录
26         long len2=FileUtils.sizeOf(new File("lib"));
27         System.out.println(len2);
28
29
30         //3、列出子孙集
31         File file=new File("dest");
32         //3-1 参数1:放个源文件夹 参数2:过滤器,保留哪一些东西  参数3:是否列出子孙集/null 表示只进行一层  把它们放在容器中去
33         //EmptyFileFilter.NOT_EMPTY:只要非空的 下边有个empty文件是空的0KB
34         Collection<File> files=FileUtils.listFiles(file, EmptyFileFilter.NOT_EMPTY, null);
35         for (File tempfile : files) {//遍历输出绝对路径, 只遍历dest下边的直系文件, 实际上里边的src文件夹还有东西
36             System.out.println(tempfile.getAbsolutePath());
37         }
38         System.out.println("-----------");
39         File file2=new File("dest");//DirectoryFileFilter 目录过滤 INSTANCE示例 操作子孙集的
40         Collection<File> files2=FileUtils.listFiles(file2, EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
41         //3-2、只输出文件后缀为.html的文件。 Suffix后缀。词尾
42         Collection<File> files3=FileUtils.listFiles(file2, new SuffixFileFilter("html"),
43                 DirectoryFileFilter.INSTANCE);
44         //3-3、or的用法 既要.html的文件又要.jpg的文件
45         Collection<File> files4=FileUtils.listFiles(file2, FileFilterUtils.or(
46                 new SuffixFileFilter("html"),new SuffixFileFilter("jpg")   ),
47                 DirectoryFileFilter.INSTANCE);
48         //3-4、我全都要 and的用法 既是txt文件又是空文件的
49         Collection<File> files5=FileUtils.listFiles(file2, FileFilterUtils.and(
50                 new SuffixFileFilter("txt"),EmptyFileFilter.EMPTY   ),
51                 DirectoryFileFilter.INSTANCE);
52
53         for (File tempfile : files5) {//遍历输出绝对路径, 遍历dest目录下的的所有东西
54             System.out.println(tempfile.getAbsolutePath());
55         }
56
57
58     }
59
60 }

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方法:向流里面写入一行内容。

【代码示例】

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

原文地址:https://www.cnblogs.com/ID-qingxin/p/10660482.html

时间: 2024-10-11 01:55:20

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

java io流 对文件夹的操作

检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文件操作方法通用,因为都是一个类 //对文件夹的操作 //检查文件夹是否存在 //显示文件夹下面的文件 //.... import java.io.*; import java.util.*; public class Index{ public static void main(String[] args) throws Excep

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

IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作. 由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题.举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这10

IO包中的其他类 打印流,序列流,操作对象,管道流,RandomAccessFile,操作基本数据类型,操作字节数组

打印流,序列流,操作对象,管道流,RandomAccessFile,操作基本数据类型,操作字节数组 一.打印流: 该流提供了打印方法,可以将各种数据类型的数据都原样打印. 字节打印流PrintStream构造函数可以接收的参数类型1.File对象 File2.字符串路径 String3.字节输出流 OutputStream 字符打印流PrintWriter(更常用)1.File对象 File2.字符串路径 String3.字节输出流 OutputStream4.字符输出流 Writer publ

JAVA之IO技术文件的复制原理。

在Swing 中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标.在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些控件的目的,所以标签在Swing中是比较常用的控件. 1.标签的使用 标签由JLabel类定义,父类为JComponent类. 标签可以显示一行只读文本,一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单低显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式. JLabel类提供了多种构造方法,这样可以创建多种标签,例如显示只有文本的标签.只

Java基础之IO技术(一)

---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理的数据无非是字符与字节.字符最简单的定义就是这个数据是否是纯文本组成,除此之外所有的都是字节.Java给我们提供了字符和字节的处理,其中字符的处理有Writer和Reader两个抽象父类(分别对应的是写和读),字节的处理有OutputStream和InputStream两个抽象类(分别对应的是写和读

CC2530的通用IO口的输入输出

一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用的就只有17个引脚了. 操作微控制器的本质,就是对这些特殊功能寄存器(SFR)进行读写操作,并且某些特殊功能寄存器可以位寻址. 每一个特殊功能寄存器本质上就是一个内存单元,为了便于使用,每个特殊功能寄存器都会起一个名字,在程序设计时,只要引入头文件“ioCC2530.h”,就可以直接使用寄存器的名称

JAVA之IO技术File类的使用

package ioTest.io3; /* * File类是对文件和文件夹的抽象. * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false. * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖. * mkdir():创建此抽象路径名指定的目录 * mkdir():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. * 2.删除 * delete() * deleteOnEx

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m

JAVA之IO技术-将java程序的异常信息保存在文件中

package ioTest.io2; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Properties; /* * 将应用程序的异常信息输出到指定的log文件中 */ public class ExceptionToFile { public static void main(String[] args) throws FileNotFoundException { int