【跟我學apache-commons】【四】commons-io的使用

commons-io是一款處理io流的工具,封裝了不少處理io流和文件的方法,能夠大大簡化咱們處理io流和操做文件的代碼。從common-io的官方使用文檔能夠看出,它主要分爲工具類、尾端類、行迭代器、文件過濾器、文件比較器和擴展流。java

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

下載 :http://commons.apache.org/proper/commons-io/download_io.cgi數組

1、工具類

工具類包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法並無多大的區別,只是操做的對象不一樣,故名思議:FileUtils主要操做File類,IOUtils主要操做IO流,FilenameUtils則是操做文件名,FileSystemUtils包含了一些JDK沒有提供的用於訪問文件系統的實用方法。當前,只有一個用於讀取硬盤空餘空間的方法可用。實例以下app

FileUtils的使用:工具

[java]  view plain  copy
 
 print?
  1. package com.wj.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.List;  
  6.   
  7. import org.apache.commons.io.FileUtils;  
  8. import org.junit.After;  
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11.   
  12. public class FileUtilsTest {  
  13.   
  14.     private String basePath = null;  
  15.   
  16.     @Before  
  17.     public void setUp() {  
  18.         basePath = System.getProperty("user.dir") + "\\file\\";  
  19.     }  
  20.   
  21.     @After  
  22.     public void tearDown() throws Exception {  
  23.     }  
  24.   
  25.     /** 
  26.      * 拷貝文件 
  27.      * @throws IOException 
  28.      */  
  29.     @Test  
  30.     public void testCopy() throws IOException {  
  31.         File srcFile = new File(basePath + "a.txt");  
  32.         File destFile = new File(basePath + "b.txt");  
  33.         FileUtils.copyFile(srcFile, destFile);  
  34.     }  
  35.       
  36.     /** 
  37.      * 刪除文件 
  38.      * @throws IOException 
  39.      */  
  40.     @Test  
  41.     public void testDelete() throws IOException{  
  42.         File delFile = new File(basePath + "b.txt");  
  43.         FileUtils.forceDelete(delFile);  
  44.         //FileUtils.forceMkdir(delFile);  
  45.     }  
  46.       
  47.     /** 
  48.      * 比較文件內容 
  49.      * @throws IOException 
  50.      */  
  51.     @Test  
  52.     public void testCompareFile() throws IOException{  
  53.         File srcFile = new File(basePath + "a.txt");  
  54.         File destFile = new File(basePath + "b.txt");  
  55.         boolean result = FileUtils.contentEquals(srcFile, destFile);  
  56.         System.out.println(result);  
  57.     }  
  58.       
  59.     /** 
  60.      * 移動文件 
  61.      * @throws IOException 
  62.      */  
  63.     @Test  
  64.     public void testMoveFile() throws IOException{  
  65.         File srcFile = new File(basePath + "b.txt");  
  66.         File destDir = new File(basePath + "move");  
  67.         FileUtils.moveToDirectory(srcFile, destDir, true);  
  68.     }  
  69.       
  70.     /** 
  71.      * 讀取文件內容 
  72.      * @throws IOException 
  73.      */  
  74.     @Test   
  75.     public void testRead() throws IOException{  
  76.         File srcFile = new File(basePath + "a.txt");  
  77.         String content = FileUtils.readFileToString(srcFile);  
  78.         List<String> contents = FileUtils.readLines(srcFile);  
  79.         System.out.println(content);  
  80.         System.out.println("******************");  
  81.         for (String string : contents) {  
  82.             System.out.println(string);  
  83.         }  
  84.     }  
  85.       
  86.     /** 
  87.      * 寫入文件內容 
  88.      * @throws IOException 
  89.      */  
  90.     @Test  
  91.     public void testWrite() throws IOException{  
  92.         File srcFile = new File(basePath + "a.txt");  
  93.         FileUtils.writeStringToFile(srcFile, "\nyes文件", true);  
  94.     }  
  95.       
  96. }  

 

FileSystemUtils的使用:測試

[java]  view plain  copy
 
 print?
  1. package com.wj.test;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.commons.io.FileSystemUtils;  
  6. import org.junit.After;  
  7. import org.junit.Before;  
  8. import org.junit.Test;  
  9.   
  10. public class FileSystemUtilsTest {  
  11.     @Before  
  12.     public void setUp() throws Exception {  
  13.     }  
  14.   
  15.     @After  
  16.     public void tearDown() throws Exception {  
  17.     }  
  18.   
  19.     /** 
  20.      * 獲取磁盤空餘空間 
  21.      * @throws IOException 
  22.      */  
  23.     @SuppressWarnings("deprecation")  
  24.     @Test  
  25.     public void testFreeSpace() throws IOException {  
  26.         // 以字節爲單位  
  27.         System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);  
  28.         System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);  
  29.         // 以k爲單位  
  30.         System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);  
  31.         System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);  
  32.           
  33.     }  
  34.   
  35. }  

 

2、尾端類

 

不一樣的計算機體系結構使用不一樣約定的字節排序。在所謂的「低位優先」體系結構中(如Intel),低位字節處於內存中最低位置,而其後的字節,則處於更高的位置。在「高位優先」的體系結構中(如Motorola),這種狀況偏偏相反。ui

這個類庫上有兩個相關類:spa

EndianUtils包含用於交換java原對象和流之間的字節序列。.net

SwappedDataInputStream類是DataInput接口的一個實例。使用它,能夠讀取非本地的字節序列。代理

 

3、行迭代器

org.apache.commons.io.LineIterator類提供了一個靈活的方式與基於行的文件交互。能夠直接建立一個實例,或者使用FileUtils或IOUtils的工廠方法來建立,實例以下:

 

[java]  view plain  copy
 
 print?
  1. package com.wj.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.apache.commons.io.FileUtils;  
  7. import org.apache.commons.io.LineIterator;  
  8. import org.junit.After;  
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11.   
  12. public class LineIteratorTest {  
  13.       
  14.     private String basePath = null;  
  15.   
  16.     @Before  
  17.     public void setUp() throws Exception {  
  18.         basePath = System.getProperty("user.dir") + "\\file\\";  
  19.     }  
  20.   
  21.     @After  
  22.     public void tearDown() throws Exception {  
  23.     }  
  24.       
  25.     /** 
  26.      * 測試行迭代器 
  27.      * @throws IOException 
  28.      */  
  29.     @Test  
  30.     public void testIterator() throws IOException{  
  31.         File file = new File(basePath + "a.txt");  
  32.         LineIterator li = FileUtils.lineIterator(file);  
  33.         while(li.hasNext()){  
  34.             System.out.println(li.nextLine());  
  35.         }  
  36.         LineIterator.closeQuietly(li);  
  37.     }  
  38.   
  39. }  



 

4、文件過濾器

org.apache.commons.io.filefilter包定義了一個合併了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此以外,這個包還提供了一系列直接可用的IOFileFilter的實現類,能夠經過他們合併其它的文件過濾器。好比,這些文件過濾器能夠在列出文件時使用或者在使用文件對話框時使用。實例以下:

[java]  view plain  copy
 
 print?
  1. package com.wj.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.apache.commons.io.filefilter.EmptyFileFilter;  
  7. import org.apache.commons.io.filefilter.SuffixFileFilter;  
  8. import org.junit.After;  
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11.   
  12. public class FileFilterTest {  
  13.       
  14.     private String basePath = null;  
  15.   
  16.     @Before  
  17.     public void setUp() throws Exception {  
  18.         basePath = System.getProperty("user.dir") + "\\file\\";  
  19.     }  
  20.   
  21.     @After  
  22.     public void tearDown() throws Exception {  
  23.     }  
  24.       
  25.     /** 
  26.      * 空內容文件過濾器 
  27.      * @throws IOException 
  28.      */  
  29.     @Test  
  30.     public void testEmptyFileFilter() throws IOException{  
  31.         File dir = new File(basePath);  
  32.         String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);  
  33.         for (String file : files) {  
  34.             System.out.println(file);  
  35.         }  
  36.     }  
  37.       
  38.     /** 
  39.      * 文件名稱後綴過濾器 
  40.      * @throws IOException 
  41.      */  
  42.     @Test  
  43.     public void testSuffixFileFilter() throws IOException{  
  44.         File dir = new File(basePath);  
  45.         String[] files = dir.list(new SuffixFileFilter("a.txt"));  
  46.         for (String file : files) {  
  47.             System.out.println(file);  
  48.         }  
  49.     }  
  50.   
  51. }  

 

 

5、文件比較器

org.apache.commons.io.comparator包爲java.io.File提供了一些java.util.Comparator接口的實現。例如,可使用這些比較器對文件集合或數組進行排序。實例以下:

 

[java]  view plain  copy
 
 print?
  1. package com.wj.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.apache.commons.io.comparator.CompositeFileComparator;  
  7. import org.apache.commons.io.comparator.DirectoryFileComparator;  
  8. import org.apache.commons.io.comparator.NameFileComparator;  
  9. import org.apache.commons.io.comparator.PathFileComparator;  
  10. import org.junit.After;  
  11. import org.junit.Before;  
  12. import org.junit.Test;  
  13.   
  14. public class ComparatorTest {  
  15.   
  16.     private String basePath = null;  
  17.   
  18.     @Before  
  19.     public void setUp() throws Exception {  
  20.         basePath = System.getProperty("user.dir") + "\\file\\";  
  21.     }  
  22.   
  23.     @After  
  24.     public void tearDown() throws Exception {  
  25.     }  
  26.   
  27.     /** 
  28.      * 文件名稱比較器 
  29.      * @throws IOException 
  30.      */  
  31.     @Test  
  32.     public void testNameFileComparator() throws IOException {  
  33.         File f1 = new File(basePath + "a.txt");  
  34.         File f2 = new File(basePath + "c.txt");  
  35.         int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);  
  36.         System.out.println(result);  
  37.     }  
  38.   
  39.     /** 
  40.      * 文件路徑比較器 
  41.      * @throws IOException 
  42.      */  
  43.     @Test  
  44.     public void testPathFileComparator() throws IOException {  
  45.         File f1 = new File(basePath + "a.txt");  
  46.         File f2 = new File(basePath + "c.txt");  
  47.         int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);  
  48.         System.out.println(result);  
  49.     }  
  50.   
  51.     /** 
  52.      * 組合比較器 
  53.      * @throws IOException 
  54.      */  
  55.     @SuppressWarnings("unchecked")  
  56.     @Test  
  57.     public void testCompositeFileComparator() throws IOException {  
  58.         File dir = new File(basePath);  
  59.         File [] files = dir.listFiles();  
  60.         for (File file : files) {  
  61.             System.out.println(file.getName());  
  62.         }  
  63.         CompositeFileComparator cfc = new CompositeFileComparator(  
  64.                 DirectoryFileComparator.DIRECTORY_COMPARATOR,  
  65.                 NameFileComparator.NAME_COMPARATOR);  
  66.         cfc.sort(files);  
  67.         System.out.println("*****after sort*****");  
  68.         for (File file : files) {  
  69.             System.out.println(file.getName());  
  70.         }  
  71.     }  
  72. }  

 

6、擴展流

 

org.apache.commons.io.input和org.apache.commons.io.output包中包含的針對數據流的各類各樣的的實現。包括:

    • 空輸出流-默默吸取發送給它的全部數據
    • T型輸出流-全用兩個輸出流替換一個進行發送
    • 字節數組輸出流-這是一個更快版本的JDK類
    • 計數流-計算經過的字節數
    • 代理流-使用正確的方法委拖
    • 可鎖寫入-使用上鎖文件提供同步寫入
    • 等等
相關文章
相關標籤/搜索