IOUtils使用介绍

在下面的例子,我们将详细说明如何使用 org.apache.commons.io 包中的 IOUtils类如何使用,通过包名我们可以知道它是 Apache Commons IO 的一部分 。该类的所有成员函数都被用来处理输入 - 输出流,它的确非常利于来编写处理此类事务的程序。IOUtils与其他Apache Commons中的类一样,都是处理IO操作的非常重要包装器,与手动编写这些功能的其他程序相比,它们实现这些方法的代码变得更小,更清晰,更易理解。

1. IOUtils类,字段和方法简介

IOUtils类的所有成员字段和方法都是静态的,因此在标准编程中不需要创建IOUtils类的对象,而是通过类名和适当的方法名来使用它。如:IOUtils.method1 ()

2. IOUtils 字段

  • static char DIR_SEPARATOR:目录分隔符
  • static char DIR_SEPARATOR_UNIX:Unix系统的目录分隔符
  • static char DIR_SEPARATOR_WINDOWS:Windows系统的目录分隔符
  • static String LINE_SEPARATOR:行分隔符
  • static String LINE_SEPARATOR_UNIX:Unix系统的行分隔符
  • static String LINE_SEPARATOR_WINDOWS:Windows系统的行分隔符

3. IOUtils 方法摘要

现在我们将要讨论的是IOUtils中的一些非常重要的方法。类中的所有处理InputStream的方法都带有内部的缓冲区,所以我们不需要再使用 BufferedReader或者 BufferedInputStream,默认的缓冲区大小为4K,不过我们也可以自定义它的大小。

  • static void closeQuietly(Closeable closeable):它将无条件的关闭一个可被关闭的对象而不抛出任何异常。它也有很多版本去支持关闭所有的InputStream、OutputStream、Reader和Writer。
  • static boolean contentEquals(Reader inp1,Reader inp2):这个方法将比较两个Reader对象的内容是否相同,相同返回true,否则返回false。它还有另外的一个版本去比较InputStream对象。还有一个方法 contentEqualsIgnoreEOL(Reader r1,Rrader r2),它将忽略行结束符而比较内容。
  • static int copy(InputStream inp,OutputStream outp):这个方法将内容按字节从一个InputStream对象复制到一个OutputStream对象,并返回复制的字节数。同样有一个方法支持从Reader对象复制到Writer对象。
  • static LineIterator lineIterator(InputStream input,String enc):这个方法将从InputStream中返回一个行迭代器,我们可以指定一个字符格式(或者为空而使用默认的)。行迭代器将持有一个打开的InputStream的引用。当你迭代结束后,应当关闭stream来释放内部资源。这个字符编码也可以是一个字符集对象。同样也有一个方法支持Reader对象。
  • static List<String> readLines(InputStream inp,String enc)
  • static List<String> readLines(Reader inp)
  • static BufferedReader toBufferedReader(Reader rdr, int size)
  • static InputStream toInputStream(CharSequence inp, String enc)
  • static String toString(Reader inp)
  • static void write(String data,Writer outp)
  • static void writeLines(Collection<?> lines,String lineEnding,Writer outp)

4. 方法使用

  1. IOUtils.toInputStream()方法

    InputStream is=IOUtils.toInputStream("This is a String","utf-8");
    

    IOUtils.toInputStream()方法为*“This is a String”*创建一个InputStream,并返回该对象。

  2. IOUtils.closeQuietly()方法

    public void test2() throws IOException {InputStream is=IOUtils.toInputStream("This is a String","utf-8");OutputStream os=new FileOutputStream("test2.txt");int bytes=IOUtils.copy(is,os);System.out.println("File Written with "+bytes+" bytes");IOUtils.closeQuietly(os);
    }
    

    我们可以方便的关闭输出流而不用抛出异常,我们打开它的源码看看:

    @Deprecated
    public static void closeQuietly(final Closeable closeable) {try {if (closeable != null) {closeable.close();}} catch (final IOException ioe) {// ignore}
    }
    

    可见,它跟我们传统的关闭输出流是一样的,没什么区别,不过我们可以看见它已经被废弃了,现在推荐的是利用Java7引入的 try-with-resources方式来关闭。

    @Test
    public void test2() throws IOException {try (InputStream is = IOUtils.toInputStream("This is a String", "utf-8");OutputStream os = new FileOutputStream("test2.txt")) {int bytes = IOUtils.copy(is, os);System.out.println("File Written with " + bytes + " bytes");}
    }
    

    更多关于 try-with-resources可以看 try-with-resources 和 multi-catch

  3. IOUtils.copy()方法

    public void test2() throws IOException {try (InputStream is = IOUtils.toInputStream("This is a String", "utf-8");OutputStream os = new FileOutputStream("test2.txt")) {int bytes = IOUtils.copy(is, os);System.out.println("File Written with " + bytes + " bytes");}
    }
    

    IOUtils.copy()方法有很多版本,我这里举例的是最常用的方法,同时还有一个IOUtils.copyLarge()方法支持复制(不超过2GB)的InputStream或者Reader对象。

  4. IOUtils.toString()方法

    FileReader fileReader = new FileReader("test2.txt"));
    System.out.println(IOUtils.toString(fileReader));
    

    和上面所看到的toString方法类似,IOUtils有支持 InputStreamURIURL的方法,它们都需要指定字符集。

  5. IOUtils.read()方法

    @Test
    public void test4(){try(FileInputStream fin=new FileInputStream("test2.txt")){byte[] buf= new byte[100];int len=IOUtils.read(fin,buf);System.out.println("The Length of Input Stream:"+len);}catch (IOException e){e.printStackTrace();}
    }
    

    该方法从InputStream中读取bytes并返回一个byte[]。之后我们可以对该byte[]数组进行操作。有些时候该方法非常有用,但是我们建议使用readlines()方法。

  6. IOUtils.writeLines()方法

    @Test
    public void test5() {try (FileInputStream fin = new FileInputStream("test2.txt")) {List ls = IOUtils.readLines(fin, "utf-8");for (int i = 0; i < ls.size(); i++) {System.out.println(ls.get(i));}} catch (IOException e) {e.printStackTrace();}
    }
    

    我们可以将InputStream的内容作为字符串列表,然后对其进行操作。

  7. IOUtils.writeLines()方法

    @Test
    public void test6(){List<String> ls=new ArrayList<>();ls.add("asdasd");ls.add("ada21");ls.add("addsf");try(OutputStream os=new FileOutputStream("test3.txt")) {IOUtils.writeLines(ls,IOUtils.LINE_SEPARATOR_WINDOWS,os);} catch (IOException e) {e.printStackTrace();}
    }
  8. LineIterator 类和 lineIterator() 方法

    @Test
    public void test7(){try(FileInputStream fin=new FileInputStream("test2.txt")){LineIterator lt=IOUtils.lineIterator(fin,"utf-8");while (lt.hasNext()){String line=lt.nextLine();System.out.println(line);}}catch (IOException e){e.printStackTrace();}
    }

    通过lineIterator方法返回一个LineIterator对象,然后进行迭代。

  9. IOUtils.write()方法

    @Test
    public void test8(){try(OutputStream os=new FileOutputStream("test4.txt")){IOUtils.write("sahjsdhjad",os,"utf-8");}catch (IOException e){e.printStackTrace();}
    }

    我们可以通过IOUtils.write()方法将String写到一个Writer对象或者OutputStream对象中去。

IOUtils使用介绍相关推荐

  1. Map Join介绍及案例

    Map Join介绍及案例 Map Join介绍 1. 使用场景 2. 优点 3. 实现方法 Map Join案例 1. 需求 (1)需求说明 (2)文件 2.案例分析 (1)需求分析 (2)输入数据 ...

  2. day17(JDBC入门jdbcUtils工具介绍)

    day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...

  3. GridFsTemplate介绍以及基本使用

    本文来说下MongoDB中的GridFsTemplate介绍以及基本使用 文章目录 GridFsTemplate概述 利用mongodb保存图片/文件/视频两种方式 bson二进制简介 GridFS简 ...

  4. MapReduce的API介绍

    MapReduce自带的InputFormat介绍: SwquenceFile文件,<K,V>形式的二进制文件: package squencefile;import org.apache ...

  5. 问卷星 php,问卷星API介绍

    问卷星API介绍: ⼀一.填写问卷时传递参数(如,⽤用户ID) 通过使⽤用⾃自定义链接可以通过在问卷链接中传递参数(如,您系统中 的⽤用户ID)到问卷中,并保存在问卷数据中.同时在填写完成问卷后 访问 ...

  6. JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器

    Servlet入门 MVC实战项目 仓储管理系统 JavaWeb入门介绍 Http协议 Http请求数据格式 Http响应数据格式 Web实战Demo:自定义服务器 对比Https协议 总结 Redi ...

  7. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

  8. Apache Commons 工具类介绍及简单使用(转)

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  9. spring 略介绍

    第一章 Spring 入门 1.1为什么要学spring spring是java语言中必须要掌握的框架,它涵盖了java的各个领域,基本上是全能的. spring的核心是依赖注入(DI),spring ...

  10. Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

最新文章

  1. java并发性是指什么_java – 什么是“非阻塞”并发,它与普通并发性有什么不同?...
  2. java怎么解决重复支付问题_支付系统设计中,如何防止重复支付?
  3. 音视频技术开发周刊 | 200
  4. Android开发之通过反射获取全局的application
  5. G - 变形课 HDU - 1181(搜索之dfs)
  6. android开发(13) 尝试在流布局中移动控件
  7. 泰山医学院计算机文化基础,泰医 专 计算机 16级.pdf
  8. 还是畅通工程(克鲁斯卡尔算法+并查集)
  9. git clone出现fatal: HTTP request failed --git版本问题
  10. 莞工计算机学院杀手,莞工oj第40题神奇的fans
  11. Silvaco仿真入门
  12. 服务器装无线上网卡,dlink无线上网卡怎么安装和设置
  13. 聊一聊为什么JAVA只允许单继承
  14. (附源码课件)10款Java小游戏满足你各种需求
  15. python计算一个三位数个位数之和
  16. [K/3Cloud]关于选单操作
  17. stata两种方法制作限制立方条图
  18. Android琐碎知识点,不断更新中
  19. 进程管理(二十二)—CFS调度器
  20. BZOJ1972:[SDOI2010]猪国杀

热门文章

  1. Centos 7.9系统安装网卡驱动
  2. 2020年中国洪涝受灾人口数、死亡失踪人口数、倒塌房屋数量及造成的直接经济损失分析[图]
  3. 《算法导论》+第四版++答案
  4. 在mac11以上系统可用的cocosbuilder3.0,12也可用。
  5. 频谱分析仪查看时域波形
  6. nandflash驱动详解
  7. java 下载excel到本地_java已知下载链接将Excel文件利用httpclient下载到本地
  8. 修改tomcat服务器图标,如何修改tomcat项目的图标(两种)
  9. Linux下数据库可视化软件推荐
  10. 在线购物系统后台登录界面html代码,电子商城(购物网站)html模板源码