FileUtils工具类的使用

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值