Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/55051917
本文出自【赵彦军的博客】
在上一篇文章中,介绍了IO FileUtils的常规用法,今天介绍IOUtils的使用。
福利
另外我已经把Commons IO 2.5的源码发布到Jcenter,大家就不用下载jar包了,可以直接引用。
- Maven引用
<dependency>
<groupId>org.apache.commons.io</groupId>
<artifactId>commonsIO</artifactId>
<version>2.5.0</version>
<type>pom</type>
</dependency>
- Gradle引用
compile 'org.apache.commons.io:commonsIO:2.5.0'
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: 11
at 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();
}
}
}
运行结果:
个人微信号:zhaoyanjun125 , 欢迎关注

Java IO流学习总结八:Commons IO 2.5-IOUtils的更多相关文章
- Java IO流学习总结七:Commons IO 2.5-FileUtils
在上面的几篇文章中,介绍了IO的常规用法,今天介绍 Commons IO 框架的使用. Commons IO简介 Apache Commons IO是Apache基金会创建并维护的Java函数库.它提 ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO流学习总结(1)
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...
- Java IO流学习总结一:输入输出流
Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...
- Java中的io流学习(了解四大基类和基本步骤)
Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...
- 20 IO流(十七)——Commons工具包,FileUtils(二)——copy方法
copy方法 package com.sxt.copy; import java.io.File; import java.io.IOException; import java.net.URL; i ...
- java的Io流学习
Java中io流的学习(一)File:https://blog.csdn.net/qq_41061437/article/details/81672859 Java中io流的学习(二)FileInpu ...
随机推荐
- winscp 秘钥登录
如题 如果不想用密码登录,可以选择用秘钥文件登录winscp 原理和linux分发ssh公钥是一个道理 1:在被管理的机器上分发公钥 ,出现 authorized_keys才可以 完成服务端配置 2: ...
- SD卡兼容性问题(转)
看到一篇关于硬件抗干扰的应用实例,很有参考值.所以,转过来方便查找. 源文:SD卡兼容性问题 最近碰到了一个SD卡兼容性的问题.主芯片SD卡组的信号,经过转接板,长排线,然后再到SD卡子板之后.对多种 ...
- CSS判断不同分辨率显示不同宽度布局CSS3技术支持IE6到IE8
CSS判断不同分辨率浏览器(显示屏幕)显示不同宽度布局CSS3技术支持IE6到IE8.将用到css3 @media样式进行判断,但IE9以下版本不支持CSS3技术,这里DIVCSS5给大家介绍通过JS ...
- Mac iTerm2使用rz、sz从远程上传下载文件
使用 brew install lrzsz .如果安装遇到错误的话,使用以下方法: 在mac终端下运行: brew install lrzsz (安装教程:http://brew.sh/index_z ...
- TM一句备注讲清楚TCP3次握手
1)C要跟S建立连接,现在,C向S发送连接建立标记SYN=1已经该次请求的序列号Seq=m. 2)S收到C的请求后,有空鸟C,那么,向C回发受勾信号ACK=1,已经该次约会的请求对应好ack=m+1 ...
- 升级PHP版本
2014-07-08 今天升级了PHP版本,出现一些错误,解决了. 主要是phpadmin的错误. 升级的目的是为了学习thinkphp.它要求最低5.3版本
- UOJ #192 【UR #14】 最强跳蚤
题目链接:最强跳蚤 这道题本来不想写博客的--但是鉴于自己犯了低级错误,还是写篇博客记载一下. 一开始我的想法和题解里面的算法而比较类似,也是先分解质因数,然后用质因子是否出现偶数次来判断当前这个数是 ...
- Android布局及属性归总(查询用)
常见布局 LinearLayout 线性布局 子元素任意,组织成一个单一的水平或垂直行,默认为水平方向TableLayout 表格布局 子元素为<Tabl ...
- java域名解析
DNS原理:http://amon.org/dns-introduction.html 根域:就是所谓的“.” 根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技 ...
- 解决IE增强配置的问题
windows2003上: win 2008上, 其实ie8就是在2008上的 为所有用户启用 IE ESC 关闭所有 Internet Explorer 的实例. 单击"开始", ...