IO流之Commons IO 2.5-IOUtils

来源:互联网 发布:儿童读书软件 编辑:程序博客网 时间:2024/05/19 05:34

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/55051917
本文出自【赵彦军的博客】

Maven引用

<dependency>  <groupId>org.apache.commons.io</groupId>  <artifactId>commonsIO</artifactId>  <version>2.5.0</version>  <type>pom</type></dependency>

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)//获取一个缓冲输入流,默认缓冲大小 1KBInputStream 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();       }   }结果:helloworld
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();    }}

}

运行结果:
这里写图片描述