commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。

官网地址:http://commons.apache.org/proper/commons-io/

下载 :http://commons.apache.org/proper/commons-io/download_io.cgi

一、工具类

工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。当前,只有一个用于读取硬盘空余空间的方法可用。实例如下

FileUtils的使用:

  1. package com.wj.test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import org.apache.commons.io.FileUtils;
  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. public class FileUtilsTest {
  10. private String basePath = null;
  11. @Before
  12. public void setUp() {
  13. basePath = System.getProperty("user.dir") + "\\file\\";
  14. }
  15. @After
  16. public void tearDown() throws Exception {
  17. }
  18. /**
  19. * 拷贝文件
  20. * @throws IOException
  21. */
  22. @Test
  23. public void testCopy() throws IOException {
  24. File srcFile = new File(basePath + "a.txt");
  25. File destFile = new File(basePath + "b.txt");
  26. FileUtils.copyFile(srcFile, destFile);
  27. }
  28. /**
  29. * 删除文件
  30. * @throws IOException
  31. */
  32. @Test
  33. public void testDelete() throws IOException{
  34. File delFile = new File(basePath + "b.txt");
  35. FileUtils.forceDelete(delFile);
  36. //FileUtils.forceMkdir(delFile);
  37. }
  38. /**
  39. * 比较文件内容
  40. * @throws IOException
  41. */
  42. @Test
  43. public void testCompareFile() throws IOException{
  44. File srcFile = new File(basePath + "a.txt");
  45. File destFile = new File(basePath + "b.txt");
  46. boolean result = FileUtils.contentEquals(srcFile, destFile);
  47. System.out.println(result);
  48. }
  49. /**
  50. * 移动文件
  51. * @throws IOException
  52. */
  53. @Test
  54. public void testMoveFile() throws IOException{
  55. File srcFile = new File(basePath + "b.txt");
  56. File destDir = new File(basePath + "move");
  57. FileUtils.moveToDirectory(srcFile, destDir, true);
  58. }
  59. /**
  60. * 读取文件内容
  61. * @throws IOException
  62. */
  63. @Test
  64. public void testRead() throws IOException{
  65. File srcFile = new File(basePath + "a.txt");
  66. String content = FileUtils.readFileToString(srcFile);
  67. List<String> contents = FileUtils.readLines(srcFile);
  68. System.out.println(content);
  69. System.out.println("******************");
  70. for (String string : contents) {
  71. System.out.println(string);
  72. }
  73. }
  74. /**
  75. * 写入文件内容
  76. * @throws IOException
  77. */
  78. @Test
  79. public void testWrite() throws IOException{
  80. File srcFile = new File(basePath + "a.txt");
  81. FileUtils.writeStringToFile(srcFile, "\nyes文件", true);
  82. }
  83. }

FileSystemUtils的使用:

  1. package com.wj.test;
  2. import java.io.IOException;
  3. import org.apache.commons.io.FileSystemUtils;
  4. import org.junit.After;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. public class FileSystemUtilsTest {
  8. @Before
  9. public void setUp() throws Exception {
  10. }
  11. @After
  12. public void tearDown() throws Exception {
  13. }
  14. /**
  15. * 获取磁盘空余空间
  16. * @throws IOException
  17. */
  18. @SuppressWarnings("deprecation")
  19. @Test
  20. public void testFreeSpace() throws IOException {
  21. // 以字节为单位
  22. System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);
  23. System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);
  24. // 以k为单位
  25. System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);
  26. System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);
  27. }
  28. }

二、尾端类

不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。

这个类库上有两个相关类:

EndianUtils包含用于交换java原对象和流之间的字节序列。

SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。

三、行迭代器

org.apache.commons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:

  1. package com.wj.test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.commons.io.FileUtils;
  5. import org.apache.commons.io.LineIterator;
  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. public class LineIteratorTest {
  10. private String basePath = null;
  11. @Before
  12. public void setUp() throws Exception {
  13. basePath = System.getProperty("user.dir") + "\\file\\";
  14. }
  15. @After
  16. public void tearDown() throws Exception {
  17. }
  18. /**
  19. * 测试行迭代器
  20. * @throws IOException
  21. */
  22. @Test
  23. public void testIterator() throws IOException{
  24. File file = new File(basePath + "a.txt");
  25. LineIterator li = FileUtils.lineIterator(file);
  26. while(li.hasNext()){
  27. System.out.println(li.nextLine());
  28. }
  29. LineIterator.closeQuietly(li);
  30. }
  31. }

四、文件过滤器

org.apache.commons.io.filefilter包定义了一个合并了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,这个包还提供了一系列直接可用的IOFileFilter的实现类,可以通过他们合并其它的文件过滤器。比如,这些文件过滤器可以在列出文件时使用或者在使用文件对话框时使用。实例如下:

  1. package com.wj.test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.commons.io.filefilter.EmptyFileFilter;
  5. import org.apache.commons.io.filefilter.SuffixFileFilter;
  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. public class FileFilterTest {
  10. private String basePath = null;
  11. @Before
  12. public void setUp() throws Exception {
  13. basePath = System.getProperty("user.dir") + "\\file\\";
  14. }
  15. @After
  16. public void tearDown() throws Exception {
  17. }
  18. /**
  19. * 空内容文件过滤器
  20. * @throws IOException
  21. */
  22. @Test
  23. public void testEmptyFileFilter() throws IOException{
  24. File dir = new File(basePath);
  25. String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);
  26. for (String file : files) {
  27. System.out.println(file);
  28. }
  29. }
  30. /**
  31. * 文件名称后缀过滤器
  32. * @throws IOException
  33. */
  34. @Test
  35. public void testSuffixFileFilter() throws IOException{
  36. File dir = new File(basePath);
  37. String[] files = dir.list(new SuffixFileFilter("a.txt"));
  38. for (String file : files) {
  39. System.out.println(file);
  40. }
  41. }
  42. }

五、文件比较器

org.apache.commons.io.comparator包为java.io.File提供了一些java.util.Comparator接口的实现。例如,可以使用这些比较器对文件集合或数组进行排序。实例如下:

  1. package com.wj.test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.commons.io.comparator.CompositeFileComparator;
  5. import org.apache.commons.io.comparator.DirectoryFileComparator;
  6. import org.apache.commons.io.comparator.NameFileComparator;
  7. import org.apache.commons.io.comparator.PathFileComparator;
  8. import org.junit.After;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. public class ComparatorTest {
  12. private String basePath = null;
  13. @Before
  14. public void setUp() throws Exception {
  15. basePath = System.getProperty("user.dir") + "\\file\\";
  16. }
  17. @After
  18. public void tearDown() throws Exception {
  19. }
  20. /**
  21. * 文件名称比较器
  22. * @throws IOException
  23. */
  24. @Test
  25. public void testNameFileComparator() throws IOException {
  26. File f1 = new File(basePath + "a.txt");
  27. File f2 = new File(basePath + "c.txt");
  28. int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);
  29. System.out.println(result);
  30. }
  31. /**
  32. * 文件路径比较器
  33. * @throws IOException
  34. */
  35. @Test
  36. public void testPathFileComparator() throws IOException {
  37. File f1 = new File(basePath + "a.txt");
  38. File f2 = new File(basePath + "c.txt");
  39. int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);
  40. System.out.println(result);
  41. }
  42. /**
  43. * 组合比较器
  44. * @throws IOException
  45. */
  46. @SuppressWarnings("unchecked")
  47. @Test
  48. public void testCompositeFileComparator() throws IOException {
  49. File dir = new File(basePath);
  50. File [] files = dir.listFiles();
  51. for (File file : files) {
  52. System.out.println(file.getName());
  53. }
  54. CompositeFileComparator cfc = new CompositeFileComparator(
  55. DirectoryFileComparator.DIRECTORY_COMPARATOR,
  56. NameFileComparator.NAME_COMPARATOR);
  57. cfc.sort(files);
  58. System.out.println("*****after sort*****");
  59. for (File file : files) {
  60. System.out.println(file.getName());
  61. }
  62. }
  63. }

六、扩展流

org.apache.commons.io.input和org.apache.commons.io.output包中包含的针对数据流的各种各样的的实现。包括:

    • 空输出流-默默吸收发送给它的所有数据
    • T型输出流-全用两个输出流替换一个进行发送
    • 字节数组输出流-这是一个更快版本的JDK类
    • 计数流-计算通过的字节数
    • 代理流-使用正确的方法委拖
    • 可锁写入-使用上锁文件提供同步写入
    • 等等

【跟我学apache-commons】【四】commons-io的使用的更多相关文章

  1. HTTP Status 500 - org.apache.jasper.JasperException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException

    HTTP Status 500 - org.apache.jasper.JasperException: com.sun.org.apache.xerces.internal.impl.io.Malf ...

  2. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte

    com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte ...

  3. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。

    org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document fro ...

  4. [老老实实学WCF] 第四篇 初探通信--ChannelFactory

    老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...

  5. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  6. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)  1.安装对应dll     Update-Package Xama ...

  7. 【原创】大叔问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat

    spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.h ...

  8. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫

    下载地址:http://download.csdn.net/detail/u013357243/8514915 以下是执行图片展示 制作思路以及代码解析 猫猫学IOS(四)UI之半小时搞定Tom猫这里 ...

  9. hive orc压缩数据异常java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.ql.io.orc.OrcSerde$OrcSerdeRow

    hive表在创建时候指定存储格式 STORED AS ORC tblproperties ('orc.compress'='SNAPPY'); 当insert数据到表时抛出异常 Caused by: ...

  10. HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    M ...

随机推荐

  1. Elasticsearch Java Rest Client API 整理总结 (一)——Document API

    目录 引言 概述 High REST Client 起步 兼容性 Java Doc 地址 Maven 配置 依赖 初始化 文档 API Index API GET API Exists API Del ...

  2. 基于.NET Standard的分布式自增ID算法--美团点评LeafSegment

    概述 前一篇文章讲述了最流行的分布式ID生成算法snowflake,本篇文章根据美团点评分布式ID生成系统文章,介绍另一种相对更容易理解和编写的分布式ID生成方式. 实现原理 Leaf这个名字是来自德 ...

  3. linux之 sed 基础

    转载:https://www.cnblogs.com/chensiqiqi/p/6382080.html sed 介绍 Sed命令是操作,过滤和转换文本内容的强大工具.常用功能有增删改查(增加,删除, ...

  4. BugkuCTF 文件上传测试

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  5. tornado学习笔记

    一.UIMOTHODS: 1.在项目目录创建uimothods.py文件(名称可以任意)内容: def test2(self): return ('hello uimothods') 2.tornad ...

  6. C++基础知识(2)

    作为接口的函数头 C++函数可被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口. 在C语言中,省略返回类型相当于说函数的类型为int,然而,C++逐步淘汰了这种用法 也可以使用下面的变体 ...

  7. 派生类&简单工厂模式

    派生类&简单工厂模式 git链接: Operation3.1.1 题目描述的代码部分的解释 首先是声明一个Rand类作为父类,然后两个子类RandNumber类和RandOperation类, ...

  8. ubuntu 12.04下 ns3的下载 安装

    这个的内容我主要是参考了 http://blog.sina.com.cn/s/blog_7ec2ab360102wwsk.html 这个链接的学习,基本上过程没有出现的问题. 就是这个链接少了测试的一 ...

  9. C#ToString() 格式化数值

    格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数. 格式说明符 说明 示例 输出 C 货币 2.5.ToString(&q ...

  10. Solr查询语法

    基于solr版本:6.0.0 当配置好本地的环境之后,就访问http://localhost:8080/solr/index.html.或者是访问已经放在服务器上的solr环境,例如http://10 ...