设为首页 收藏本站
查看: 664|回复: 0

[经验分享] 【跟我学apache-commons】【四】commons-io的使用

[复制链接]

尚未签到

发表于 2017-12-24 22:08:37 | 显示全部楼层 |阅读模式
  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的使用:
[java] view plain copy  print?

  • package com.wj.test;

  • import java.io.File;
  • import java.io.IOException;
  • import java.util.List;

  • import org.apache.commons.io.FileUtils;
  • import org.junit.After;
  • import org.junit.Before;
  • import org.junit.Test;

  • public class FileUtilsTest {

  •     private String basePath = null;

  •     @Before
  •     public void setUp() {
  •         basePath = System.getProperty("user.dir") + "\\file\\";
  •     }

  •     @After
  •     public void tearDown() throws Exception {
  •     }

  •     /**
  •      * 拷贝文件
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testCopy() throws IOException {
  •         File srcFile = new File(basePath + "a.txt");
  •         File destFile = new File(basePath + "b.txt");
  •         FileUtils.copyFile(srcFile, destFile);
  •     }

  •     /**
  •      * 删除文件
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testDelete() throws IOException{
  •         File delFile = new File(basePath + "b.txt");
  •         FileUtils.forceDelete(delFile);
  •         //FileUtils.forceMkdir(delFile);
  •     }

  •     /**
  •      * 比较文件内容
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testCompareFile() throws IOException{
  •         File srcFile = new File(basePath + "a.txt");
  •         File destFile = new File(basePath + "b.txt");
  •         boolean result = FileUtils.contentEquals(srcFile, destFile);
  •         System.out.println(result);
  •     }

  •     /**
  •      * 移动文件
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testMoveFile() throws IOException{
  •         File srcFile = new File(basePath + "b.txt");
  •         File destDir = new File(basePath + "move");
  •         FileUtils.moveToDirectory(srcFile, destDir, true);
  •     }

  •     /**
  •      * 读取文件内容
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testRead() throws IOException{
  •         File srcFile = new File(basePath + "a.txt");
  •         String content = FileUtils.readFileToString(srcFile);
  •         List<String> contents = FileUtils.readLines(srcFile);
  •         System.out.println(content);
  •         System.out.println("******************");
  •         for (String string : contents) {
  •             System.out.println(string);
  •         }
  •     }

  •     /**
  •      * 写入文件内容
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testWrite() throws IOException{
  •         File srcFile = new File(basePath + "a.txt");
  •         FileUtils.writeStringToFile(srcFile, "\nyes文件", true);
  •     }

  • }
  FileSystemUtils的使用:
[java] view plain copy  print?

  • package com.wj.test;

  • import java.io.IOException;

  • import org.apache.commons.io.FileSystemUtils;
  • import org.junit.After;
  • import org.junit.Before;
  • import org.junit.Test;

  • public class FileSystemUtilsTest {
  •     @Before
  •     public void setUp() throws Exception {
  •     }

  •     @After
  •     public void tearDown() throws Exception {
  •     }

  •     /**
  •      * 获取磁盘空余空间
  •      * @throws IOException
  •      */
  •     @SuppressWarnings("deprecation")
  •     @Test
  •     public void testFreeSpace() throws IOException {
  •         // 以字节为单位
  •         System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);
  •         System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);
  •         // 以k为单位
  •         System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);
  •         System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);

  •     }

  • }
二、尾端类
  不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。
  这个类库上有两个相关类:
  EndianUtils包含用于交换java原对象和流之间的字节序列。
  SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。
三、行迭代器
  org.apache.commons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:
[java] view plain copy  print?

  • package com.wj.test;

  • import java.io.File;
  • import java.io.IOException;

  • import org.apache.commons.io.FileUtils;
  • import org.apache.commons.io.LineIterator;
  • import org.junit.After;
  • import org.junit.Before;
  • import org.junit.Test;

  • public class LineIteratorTest {

  •     private String basePath = null;

  •     @Before
  •     public void setUp() throws Exception {
  •         basePath = System.getProperty("user.dir") + "\\file\\";
  •     }

  •     @After
  •     public void tearDown() throws Exception {
  •     }

  •     /**
  •      * 测试行迭代器
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testIterator() throws IOException{
  •         File file = new File(basePath + "a.txt");
  •         LineIterator li = FileUtils.lineIterator(file);
  •         while(li.hasNext()){
  •             System.out.println(li.nextLine());
  •         }
  •         LineIterator.closeQuietly(li);
  •     }

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

  • package com.wj.test;

  • import java.io.File;
  • import java.io.IOException;

  • import org.apache.commons.io.filefilter.EmptyFileFilter;
  • import org.apache.commons.io.filefilter.SuffixFileFilter;
  • import org.junit.After;
  • import org.junit.Before;
  • import org.junit.Test;

  • public class FileFilterTest {

  •     private String basePath = null;

  •     @Before
  •     public void setUp() throws Exception {
  •         basePath = System.getProperty("user.dir") + "\\file\\";
  •     }

  •     @After
  •     public void tearDown() throws Exception {
  •     }

  •     /**
  •      * 空内容文件过滤器
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testEmptyFileFilter() throws IOException{
  •         File dir = new File(basePath);
  •         String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);
  •         for (String file : files) {
  •             System.out.println(file);
  •         }
  •     }

  •     /**
  •      * 文件名称后缀过滤器
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testSuffixFileFilter() throws IOException{
  •         File dir = new File(basePath);
  •         String[] files = dir.list(new SuffixFileFilter("a.txt"));
  •         for (String file : files) {
  •             System.out.println(file);
  •         }
  •     }

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

  • package com.wj.test;

  • import java.io.File;
  • import java.io.IOException;

  • import org.apache.commons.io.comparator.CompositeFileComparator;
  • import org.apache.commons.io.comparator.DirectoryFileComparator;
  • import org.apache.commons.io.comparator.NameFileComparator;
  • import org.apache.commons.io.comparator.PathFileComparator;
  • import org.junit.After;
  • import org.junit.Before;
  • import org.junit.Test;

  • public class ComparatorTest {

  •     private String basePath = null;

  •     @Before
  •     public void setUp() throws Exception {
  •         basePath = System.getProperty("user.dir") + "\\file\\";
  •     }

  •     @After
  •     public void tearDown() throws Exception {
  •     }

  •     /**
  •      * 文件名称比较器
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testNameFileComparator() throws IOException {
  •         File f1 = new File(basePath + "a.txt");
  •         File f2 = new File(basePath + "c.txt");
  •         int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);
  •         System.out.println(result);
  •     }

  •     /**
  •      * 文件路径比较器
  •      * @throws IOException
  •      */
  •     @Test
  •     public void testPathFileComparator() throws IOException {
  •         File f1 = new File(basePath + "a.txt");
  •         File f2 = new File(basePath + "c.txt");
  •         int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);
  •         System.out.println(result);
  •     }

  •     /**
  •      * 组合比较器
  •      * @throws IOException
  •      */
  •     @SuppressWarnings("unchecked")
  •     @Test
  •     public void testCompositeFileComparator() throws IOException {
  •         File dir = new File(basePath);
  •         File [] files = dir.listFiles();
  •         for (File file : files) {
  •             System.out.println(file.getName());
  •         }
  •         CompositeFileComparator cfc = new CompositeFileComparator(
  •                 DirectoryFileComparator.DIRECTORY_COMPARATOR,
  •                 NameFileComparator.NAME_COMPARATOR);
  •         cfc.sort(files);
  •         System.out.println("*****after sort*****");
  •         for (File file : files) {
  •             System.out.println(file.getName());
  •         }
  •     }
  • }
六、扩展流
  org.apache.commons.io.input和org.apache.commons.io.output包中包含的针对数据流的各种各样的的实现。包括:


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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427652-1-1.html 上篇帖子: 使用Apache POI导出Excel小结 下篇帖子: Apache版Phoenix的安装(图文详解)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表