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的使用。

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 , 欢迎关注

相关文章
|
22天前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
211 0
|
2月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
139 1
|
29天前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
157 0
|
29天前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
154 7
|
1月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
143 1
|
2月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
64 5
|
2月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
120 5
|
2月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
164 3
|
2月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
64 1
|
2月前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
128 1