1. package cn.xingoo.learn.commons;
  2. import org.apache.commons.io.FileUtils;
  3. import org.apache.commons.io.filefilter.DirectoryFileFilter;
  4. import org.apache.commons.io.filefilter.FileFileFilter;
  5. import org.apache.commons.io.filefilter.FileFilterUtils;
  6. import org.apache.commons.io.filefilter.IOFileFilter;
  7. import org.junit.Test;
  8. import java.io.*;
  9. import java.net.URL;
  10. import java.util.Date;
  11. import java.util.Iterator;
  12. import java.util.List;
  13. import java.util.zip.CRC32;
  14. /**
  15. * FileUtils支持很多文件操作,如
  16. *
  17. * 文件写入
  18. * 读取文件
  19. * 创建目录
  20. * 拷贝文件和目录
  21. * 删除文件和目录
  22. * 从URL转换
  23. * 基于统配和过滤查看文件和目录
  24. * 比较文件内容
  25. * 文件的更新时间
  26. * 检查校验码
  27. *
  28. * Created by xxh on 2016/11/24.
  29. */
  30. public class FileUtilsTest {
  31. private static File parent = new File("D://test");
  32. @Test
  33. public void getDirTest(){
  34. //获得基本的信息
  35. System.out.println(FileUtils.getTempDirectory());//获取临时目录 java.io.tmpdir,getUserDirectoryPath返回路径字符串
  36. System.out.println(FileUtils.getUserDirectory());//获取用户主目录 user.home,getUserDirectoryPath返回路径字符串
  37. //以可读的方式,返回文件的大小EB, PB, TB, GB, MB, KB or bytes
  38. System.out.println(FileUtils.byteCountToDisplaySize(10000000));
  39. System.out.println(FileUtils.byteCountToDisplaySize(1));
  40. }
  41. @Test
  42. public void openStream() throws IOException {
  43. //获取文件输入和输出的文件流
  44. //文件是目录或者不存在,都会跑出异常
  45. InputStream in = FileUtils.openInputStream(new File("D://test/test1"));
  46. OutputStream out = FileUtils.openOutputStream(new File("D://test/test2"));
  47. out = FileUtils.openOutputStream(new File("D://test/test3"),true);//是否追加的形式添加内容
  48. }
  49. @Test
  50. public void FileOperation() throws IOException {
  51. //创建文件,如果文件存在则更新时间;如果不存在,创建一个空文件
  52. //创建空文件的方式为:
  53. // final OutputStream out = openOutputStream(file);
  54. // IOUtils.closeQuietly(out);
  55. FileUtils.touch(new File("D://test/test4"));
  56. //文件内容的对比
  57. FileUtils.contentEquals(new File("D://test/test1"),new File("D://test/test2"));
  58. FileUtils.contentEqualsIgnoreEOL(new File("D://test/test1"),new File("D://test/test2"),null);//忽略换行符,第三个参数是字符集
  59. //根据URL获取文件
  60. FileUtils.toFile(new URL("file://D://test/test1"));
  61. FileUtils.toFiles(null);
  62. FileUtils.toURLs(new File[]{new File("D://test/test1")});
  63. //文件拷贝
  64. FileUtils.copyFileToDirectory(new File("/test1"),new File("/dir"),true);//第三个参数是否更新时间
  65. FileUtils.copyFile(new File("/source"),new File("/target"),true);//TODO 阅读doCopy源码
  66. //目录拷贝
  67. File srcDir = new File("/source");
  68. File destDir = new File("/target");
  69. FileUtils.copyDirectoryToDirectory(new File("/source"),new File("/target"));
  70. FileUtils.copyDirectory(new File("/source"),new File("/target"));
  71. FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);//仅仅拷贝目录
  72. IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");// 创建.txt过滤器
  73. IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
  74. // 创建包含目录或者txt文件的过滤器
  75. FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
  76. // Copy using the filter
  77. FileUtils.copyDirectory(srcDir, destDir, filter);//TODO 阅读doCopyDirectory源码
  78. //文件拷贝
  79. FileUtils.copyInputStreamToFile(new FileInputStream("/test"),new File("/test"));
  80. FileUtils.copyURLToFile(new URL("file:/test"),new File("/test"));
  81. //删除文件
  82. FileUtils.deleteDirectory(new File("/test"));//删除目录下所有的内容
  83. FileUtils.deleteQuietly(new File("/test"));//如果是目录,会级联删除;不会抛出异常
  84. //判断文件是否存在
  85. FileUtils.directoryContains(new File("/dir"),new File("/file"));
  86. //清除目录中的内容,不会删除该目录;
  87. //先verifiedListFiles检查目录,检查目录是否为目录、是否存在,然后调用listFiles,如果返回null,则抛出异常
  88. //遍历目录中的文件,如果是目录则递归删除;如果是文件则强制删除,删除失败(文件不存在或无法删除)都会抛出异常
  89. FileUtils.cleanDirectory(new File("/dir"));//TODO verifiedListFiles <------2016/11/24
  90. //等待一个文件xx秒,知道文件创建后才返回。每max(100,remainning)循环检查一次
  91. while(FileUtils.waitFor(new File("/dir"),60)){}
  92. //读取目标文件,内部调用IOUtils.toString(inputstream,"utf-8")
  93. String str = FileUtils.readFileToString(new File("/dir"),"utf-8");
  94. //内部调用IOUtils.toByteArray(in)
  95. byte[] bytes = FileUtils.readFileToByteArray(new File("/dir"));
  96. //内部调用IOUtils.readLines(in, Charsets.toCharset(encoding));
  97. List<String> strs = FileUtils.readLines(new File("/dir"),"utf-8");
  98. //内部调用IOUtils.lineIterator(in, encoding)
  99. FileUtils.lineIterator(new File("/dir"),"utf-8");
  100. //四个参数分别为:目标文件,写入的字符串,字符集,是否追加
  101. FileUtils.writeStringToFile(new File("/target"),"string","utf-8",true);
  102. //write可以接受charsequence类型的数据,string,stringbuilder和stringbuffer都是实现了charsequence接口
  103. FileUtils.write(new File("/target"),"target char sequence","utf-8",true);
  104. FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes());//(file,字符数组)
  105. FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),true);//(file,字符数组,是否追加)
  106. FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),0,10);//(file,字符数组,起始位置,结束位置)
  107. FileUtils.writeByteArrayToFile(new File("/target"),"bytes".getBytes(),0,10,true);//(file,字符数组,起始位置,结束位置,是否追加)
  108. //writeLines多了一个lineEnding参数
  109. FileUtils.writeLines(new File("/target"),"utf-8", FileUtils.readLines(new File("/target"),"utf-8"));
  110. //强制删除
  111. FileUtils.forceDelete(new File("/target"));
  112. //在JVM
  113. FileUtils.forceDeleteOnExit(new File("/target"));
  114. //强制创建文件目录,如果文件存在,会抛出异常
  115. FileUtils.forceMkdir(new File("/target"));
  116. //强制创建父级目录
  117. FileUtils.forceMkdirParent(new File("/xxxx/target"));
  118. //如果是文件,直接读取文件大小;如果是目录,级联计算文件下的所有文件大小
  119. FileUtils.sizeOf(new File("/target"));//返回Long
  120. FileUtils.sizeOfAsBigInteger(new File("/target"));//返回BigInteger
  121. FileUtils.sizeOfDirectory(new File("/target"));
  122. FileUtils.sizeOfDirectoryAsBigInteger(new File("/target"));
  123. //对比文件新旧
  124. FileUtils.isFileNewer(new File("/target"),new File("/file"));
  125. FileUtils.isFileOlder(new File("/target"), new Date());
  126. FileUtils.checksum(new File("/target"),new CRC32());
  127. FileUtils.checksumCRC32(new File("/target"));
  128. FileUtils.moveDirectory(new File("/target"),new File("/file"));
  129. FileUtils.moveDirectoryToDirectory(new File("/target"),new File("/file"),true);
  130. FileUtils.moveFile(new File("/target"),new File("/file"));
  131. FileUtils.moveFileToDirectory(new File("/target"),new File("/dir"),true);
  132. FileUtils.moveToDirectory(new File("/target"),new File("/dir"),true);
  133. FileUtils.isSymlink(new File("/target"));
  134. }
  135. @Test
  136. public void findFiles(){
  137. //返回文件的列表
  138. List<File> files = (List<File>) FileUtils.listFiles(parent,new String[]{"test1","test2"},true);//TODO 重点看一下源码
  139. //返回文件迭代器
  140. Iterator<File> files_iter = FileUtils.iterateFiles(parent,new String[]{"test1","test3"},true);
  141. //把collection<File>转换成File[]
  142. FileUtils.convertFileCollectionToFileArray(files);
  143. }
  144. }

Java程序员的日常—— FileUtils工具类的使用的更多相关文章

  1. Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...

  2. Java程序员的日常——经验贴(纯干货)

    工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...

  3. Java程序员的日常—— 《编程思想》关于类的使用常识

    Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...

  4. Java程序员的日常 —— 《编程思想》持有对象

    集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...

  5. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  6. Java程序员的日常—— IOUtils总结

    以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有 ...

  7. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

  8. 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。

    返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...

  9. Java程序员的日常 —— 多进程开发

    最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理. 这里简单的介绍下: 如何在Java中执行命令 在windows下肯定是dos命令了,而在linux则为shell命令.执行的方 ...

随机推荐

  1. 在Heroku上部署Node.js应用

    最近在学习Node.js,想找一个可以免费部署Node的平台,于是便找到了Heroku 直接进入主题,接下来我们一步一步部署自己的Node应用. 步骤1: 注册一个免费的Heroku账号. 步骤2: ...

  2. Android下的屏幕适配

    1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px

  3. Blend打不开wpf项目,提示无法识别的工具版本“12.0”

          讲项目文件用记事本打开然后修改为“14.0”即可        

  4. sql union和union all的用法及效率

    UNION指令的目的是将两个SQL语句的结果合并起来.从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION的一个限制是两个 ...

  5. gem安装cocoapods

    1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPods时我们要访问cocoap ...

  6. Android 权限列表

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,允许读写check-in数据库属性表的权限 ( Allows read/write acces ...

  7. Cordova 3.x入门 - 目录

    这个系列是基于Cordova 3.x的,很多Android的东西都是Eclipse ADT+Ant的,而目前Android的开发已经完全切换到了Android Studio+Gradle,需要大家特别 ...

  8. <input>和<textarea>

    作为一个刚刚涉足PHP开发的菜鸟,第一次使用博客.在这里分享一些经验给和需要的朋友,互相探讨.共同学习,希望对你有所帮助. 废话不多说,下面进入正题. 应该有朋友和我一样,需要用到文本框,要求它会自动 ...

  9. Find Peak Element

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  10. Java 用程序给出随便大小的10 个数,序号为1-10,按从小到大顺序输出,并输出相应的序号?

    import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.uti ...