IOUtils 是 apache 基金会下面的一个子项目,提供了对于 IO 流操作的进一步封装,让我们可以更加方便的对 IO 流进行操作。

IOUtils的下载地址是:

http://commons.apache.org/proper/commons-io/download_io.cgi

IOUtils的api帮助文档地址:

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html

打开IOUtils的api文档,我们发现他的方法大部分都是重载的。所以,我们理解他的方法并不是难事。因此,对于他方法的用法总结如下:

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

closeQueitly方法:关闭流

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

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

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

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

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

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

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

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

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

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

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

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

IOUtils流操作的相关方法

  • copy:这个方法可以拷贝流,算是这个工具类中使用最多的方法了。支持多种数据间的拷贝。copy内部使用的其实还是copyLarge方法。因为copy能拷贝Integer.MAX_VALUE的字节数据,即2^31-1。
copy(inputstream,outputstream)
copy(inputstream,writer)
copy(inputstream,writer,encoding)
copy(reader,outputstream)
copy(reader,writer)
copy(reader,writer,encoding)
  • copyLarge:这个方法适合拷贝较大的数据流,比如2G以上。
copyLarge(reader,writer) 默认会用1024*4的buffer来读取
copyLarge(reader,writer,buffer)
  • 获取输入流
//通过文本获取输入流 , 可以指定编码格式
InputStream toInputStream(final String input, final Charset encoding)InputStream toInputStream(final String input, final String encoding)//获取一个缓冲输入流,默认缓冲大小 1KB
InputStream toBufferedInputStream(final InputStream input)  //获取一个指定缓冲流的大小的输入流
InputStream toBufferedInputStream(final InputStream input, int size)//把流的全部内容放在另一个流中
BufferedReader toBufferedReader(final Reader reader)//把流的全部内容放在另一个流中
BufferedReader toBufferedReader(final Reader reader, int size)
  • 获取输入流里面的内容
// 输入流 --》 字符串
String toString(final InputStream input, final Charset encoding)// 输入流 --》 字符串
String toString(final InputStream input, final String encoding)// 字符输入流 --》 字符串
String toString(final Reader input)// 字符数组 --》 字符串
String toString(final byte[] input, final String encoding)//输入流 --》 字符数组
byte[] toByteArray(final InputStream input)//输入流 --》 字符数组
byte[] toByteArray(final Reader input, final Charset encoding)//输入流 --》 字符数组
byte[] toByteArray(final Reader input, final String encoding) //URL   --》 字符数组
byte[] toByteArray(final URI uri)// URL  --》 字符串
String toString(final URL url, final Charset encoding)// URL  --》 字符串
String toString(final URL url, final String encoding)// URLConnection --》 字符串
byte[] toByteArray(final URLConnection urlConn)
  • 字符串读写
List<String> readLines(InputStream input) List<String> readLines(InputStream input, final Charset encoding) List<String> readLines(InputStream input, final String encoding)List<String> readLines(Reader input)void writeLines(Collection<?> lines, String lineEnding, OutputStream output)void writeLines(Collection<?> lines, String lineEnding, OutputStream output, Charset encoding)void writeLines(Collection<?> lines, String lineEnding, OutputStream output, final encoding)void writeLines(Collection<?> lines, String lineEnding,Writer writer)

小例子:

public void readLinesTest(){try{InputStream is = new FileInputStream("D://test1.txt");List<String> lines = IOUtils.readLines(is);for(String line : lines){System.out.println(line);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

结果:

hello
world
  • write:这个方法可以把数据写入到输出流中
write(byte[] data, OutputStream output)
write(byte[] data, Writer output)
write(byte[] data, Writer output, Charset encoding)
write(byte[] data, Writer output, String encoding)write(char[] data, OutputStream output)
write(char[] data, OutputStream output, Charset encoding)
write(char[] data, OutputStream output, String encoding)
write(char[] data, Writer output)write(CharSequence data, OutputStream output)
write(CharSequence data, OutputStream output, Charset encoding)
write(CharSequence data, OutputStream output, String encoding)
write(CharSequence data, Writer output)write(StringBuffer data, OutputStream output)
write(StringBuffer data, OutputStream output, String encoding)
write(StringBuffer data, Writer output)write(String data, OutputStream output)
write(String data, OutputStream output, Charset encoding)
write(String data, OutputStream output, String encoding)
write(String data, Writer output)
  • read:从一个流中读取内容
read(inputstream,byte[])
read(inputstream,byte[],offset,length)
//offset是buffer的偏移值,length是读取的长度read(reader,char[])
read(reader,char[],offset,length)

下例子:

public void readTest(){try{byte[] bytes = new byte[4];InputStream is = IOUtils.toInputStream("hello world");IOUtils.read(is, bytes);System.out.println(new String(bytes));bytes = new byte[10];is = IOUtils.toInputStream("hello world");IOUtils.read(is, bytes, 2, 4);System.out.println(new String(bytes));} catch (IOException e) {e.printStackTrace();}}
  • readFully:这个方法会读取指定长度的流,如果读取的长度不够,就会抛出异常
readFully(inputstream,byte[])
readFully(inputstream,byte[],offset,length)
readFully(reader,charp[])
readFully(reader,char[],offset,length)

小例子:

public void readFullyTest(){byte[] bytes = new byte[4];InputStream is  = IOUtils.toInputStream("hello world");try {IOUtils.readFully(is,bytes);System.out.println(new String(bytes));} catch (IOException e) {e.printStackTrace();}}

输出:hell
报出异常:

java.io.EOFException: Length to read: 20 actual: 11at org.apache.commons.io.IOUtils.readFully(IOUtils.java:2539)at org.apache.commons.io.IOUtils.readFully(IOUtils.java:2558)at test.java.IOUtilsTest.readFullyTest(IOUtilsTest.java:22)...
  • contentEquals:比较两个流是否相等
contentEquals(InputStream input1, InputStream input2)
contentEquals(Reader input1, Reader input2)
  • contentEqualsIgnoreEOL:比较两个流,忽略换行符
contentEqualsIgnoreEOL(Reader input1, Reader input2)
  • skip:这个方法用于跳过指定长度的流
long skip(inputstream,skip_length)
long skip(ReadableByteChannel,skip_length)
long skip(reader,skip_length)
  • skipFully:这个方法类似skip,只是如果忽略的长度大于现有的长度,就会抛出异常。
skipFully(inputstream,toSkip)
skipFully(readableByteChannel,toSkip)
skipFully(inputstream,toSkip)

小例子:

public void skipFullyTest(){InputStream is = IOUtils.toInputStream("hello world");try {IOUtils.skipFully(is,30);System.out.println(IOUtils.toString(is,"utf-8"));} catch (IOException e) {e.printStackTrace();}
}
  • ineIterator:读取流,返回迭代器
LineIterator lineIterator(InputStream input, Charset encoding)
LineIterator lineIterator(InputStream input, String encoding)
LineIterator lineIterator(Reader reader)
  • close:关闭流

//关闭 URLConnection
void close(final URLConnection conn)//closeQuietly 忽略nulls和异常,关闭某个流
void closeQuietly(final Reader input)void closeQuietly(final Writer output)void closeQuietly(final InputStream input)void closeQuietly(final OutputStream output)void closeQuietly(final Socket sock)void closeQuietly(final ServerSocket sock)
  • 小例子1

package com.app;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;public class A8 {public static void main(String[] args) {String meString = "哈哈哈哈,下班了,hello" ;try {InputStream inputStream = IOUtils.toInputStream( meString, "utf-8" ) ;String mes = IOUtils.toString( inputStream , "utf-8" ) ;System.out.println( mes );} catch (IOException e) {e.printStackTrace();}}
}

效果:

哈哈哈哈,下班了,hello
  • 小例子2 : 模拟了http 请求
package com.app;
import java.io.IOException;
import java.net.URL;import org.apache.commons.io.IOUtils;public class A8 {public static void main(String[] args) {String meString = "http://www.baidu.com" ;try {//模拟了http 请求String mes = IOUtils.toString( new URL( meString ) , "utf-8") ;System.out.println( mes );} catch (IOException e) {e.printStackTrace();}}
}

运行结果:

Commons IO -- IOUtils相关推荐

  1. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  2. Commons IO 2.5-IOUtils

    转自:http://blog.csdn.net/zhaoyanjun6/article/details/55051917 福利 另外我已经把Commons IO 2.5的源码发布到Jcenter,大家 ...

  3. <Java>使用commons.io修改文件内容(中文标点符号改成英文)

    一.前言 今天整理笔记,发生笔记中很多代码和笔记的标点符号是中文符号,所以写了个很简单的代码实现中文标点符号改成英文标点符号,读写文件涉及到io流,传统io流使用起来不是很方便,代码量多,难记!(赶时 ...

  4. 使用org.apache.commons.io.FileUtils,IOUtils工具类操作文件

    转载自 使用org.apache.commons.io.FileUtils,IOUtils;工具类操作文件 File src = new File("G:/2012/portal/login ...

  5. Commons IO

    Common IO 是一个工具库,用来帮助开发IO功能 它包括6个主要部分 Utility classes – 包括一些静态方法来执行常用任务 Input – InputStream 和 Reader ...

  6. Commons IO方便读写文件的工具类

    Commons IO是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等. 普通地读取一个网页的源代码的代码可能如下 InputStr ...

  7. [转]Apache Commons IO入门教程

    Apache Commons IO是Apache基金会创建并维护的Java函数库.它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的 ...

  8. Java IO流学习总结七:Commons IO 2.5-FileUtils

    Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/5497 ...

  9. java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)

    最近用jsoup配合htmlunit 爬取异步加载的网页运行代码的时候,报错java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets ...

最新文章

  1. ORA-00913错误:PL/SQL: ORA-00913: too many values
  2. BGP MPLS中MCE技术介绍
  3. NYOJ 875 小M的操作数
  4. 查找xml文件中某接点的值
  5. html复选框不可修改,如何用【伪类】成功修改HTML checkbox默认样式?(新checkbox覆盖老checkbox无法点击的问题)...
  6. org.hibernate.NonUniqueObjectException:
  7. python逻辑判断_return逻辑判断表达式
  8. 下载视频 用IDM下载的视频花屏
  9. linux ap中继模式,小米AIoT AX3600 WiFi 6有线中继模式(AP模式)自定义局域网LAN IP地址...
  10. 批量删除html 超链接,Excel中批量删除超链接的方法
  11. 九度 OJ 之 题目1538:GrassLand密码
  12. rabbit 的使用方法
  13. 学习记录_美术部分_美术理论基础
  14. three.js中坐标系转换以及camera的position、lookAt与up属性理解
  15. 吡啶及吡啶衍生物废水处理
  16. 如何免费识别图片文字?这几个软件彻底解放你的双手
  17. 从三个维度分析DeFi连环清算问题的解决方案 | 链捕手
  18. 计算机组成原理与系统结构原理,计算机组成原理与系统结构
  19. Jflash 命令行 烧录程序 注意事项
  20. 使用PCA9685控制多个舵机

热门文章

  1. hdu1426 Sudoku Killer
  2. (翻译)Entity Framework技巧系列之一 - Tip 1 - 5
  3. 解释OBJECT_ID和OBJECTPROPERTY
  4. 【信息系统项目管理师】第9章-项目人力资源管理 知识点详细整理
  5. 【Python】常用字符串api
  6. 命名管道(FIFO) Linux进程进程间的通信之命名管道(FIFO)
  7. pandas去掉html标签,用Pandas清理HTML表
  8. jetty java 禁用目录列表_Apache httpd 目录列表禁用配置(options indexes)
  9. python 列表 extend append_Python中list操作之append、extend
  10. Windows下载FFmpeg最新版(踩了一上午的坑终于成功)