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. 事务特性,事务的隔离级别,并发事务可能出现的问题,spring事务 数据库锁

    1.0 事务特性(ACID) Atomicity:原子性,一个事务不可以被拆分 Consistency:一致性,在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态, ...

  2. Mysql + Mybatis动态建表

    service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.co ...

  3. 设计模式 笔记 策略模式 Strategy

    //---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...

  4. vue-router单页应用简单示例(一)

    请先完成了项目初始化,具体请看我另一篇博文.vue项目初始化 看一下完成的效果图,很典型的单页应用. .vue后缀名的单文件组件   这里先说一下我对组件的理解.组件,顾名思义就是一组元素组成的一个原 ...

  5. win10+anaconda3+python3.6+opencv3.1.0

    最近用windows系统比较多,就想在win10下搞一下深度学习这一方面的研究,那么就需要配置好环境巴拉巴拉的一堆东西.默默记个笔记,正所谓“好记性不如烂笔头”. 1.安装Anaconda 这个是一个 ...

  6. 爱普生L313彩色打印相片

    操作环境: windows 和MAC 一.普通打印(默认选项) 1.爱普生L313 普通默认打印为快速不清晰打印. 2.以上打印效果出来图片比较快速出图,但是清晰度不够 二.照片打印设置 1.照片设置 ...

  7. 20135220谈愈敏Linux Book_5

    第五章 系统调用 内核提供了用户进程与内核进行交互的一组接口. 应用程序发出请求->内核负责满足 目的:保证系统稳定可靠 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层 ...

  8. Alpha答辩总结

    [Alpha展示评审表格] 小组序号 小组名称 格式(20%) 内容(20%) PPT(20%) 演讲(20%) 答辩(20%) 总分 1 天机组 15 15 15 15 16 76 2 PMS 16 ...

  9. ns3的输入输出奥秘(一) LOGGING系统

    1.LOGGING系统 (1)在我们之前对C++的理解,输出好像就是cout,然而 以myfirst.cc为例子 在我们前面的编写的代码中并没有出现cout,那他是如何输出. 可以回忆一下 LogCo ...

  10. 从零开始学Kotlin-类和对象(5)

    定义一个类 定义一个类,使用关键字class声明,后面跟类名(不使用new) class demo5 {//定义一个类,使用关键字class声明,后面跟类名 fun test() {//类中定义方法 ...