天天看點

Java IO流學習總結八:Commons IO 2.5-IOUtilsJava 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引用

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[];
          InputStream is = IOUtils.toInputStream("hello world");
          IOUtils.read(is, bytes);
          System.out.println(new String(bytes));

          bytes = new byte[];
          is = IOUtils.toInputStream("hello world");
          IOUtils.read(is, bytes, , );
          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[];
      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:  actual: 
    at org.apache.commons.io.IOUtils.readFully(IOUtils.java:)
    at org.apache.commons.io.IOUtils.readFully(IOUtils.java:)
    at test.java.IOUtilsTest.readFullyTest(IOUtilsTest.java:)
    ...
           
  • 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,);
        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();
        }
    }
}

           

運作結果:

Java IO流學習總結八:Commons IO 2.5-IOUtilsJava IO流學習總結八:Commons IO 2.5-IOUtils

個人微信号:

zhaoyanjun125

, 歡迎關注

Java IO流學習總結八:Commons IO 2.5-IOUtilsJava IO流學習總結八:Commons IO 2.5-IOUtils

繼續閱讀