关于Apache Commons-IO的使用

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

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

  • 工具类

  工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,

  FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。

  FileUtils的使用:

  /** 
     * 拷贝文件 
     * @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);  
    }  
  • 尾端类

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

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

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

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

  • 行迭代器
  /** 
     * 测试行迭代器 
     * @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);  
    }  
  • 文件过滤器
  /** 
     * 空内容文件过滤器 
     * @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);  
        }  
    }  
  • 文件比较器
  /** 
     * 文件名称比较器 
     * @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());  
        }  
    }  
  • 扩展流

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

猜你喜欢

转载自www.cnblogs.com/zhuchaoli/p/10317466.html