[19/04/04-星期四] IO技术_CommonsIO(通用IO,别人造的轮子,FileUtils类 操作文件 IOUtilsl类 操作里边的内容 )...
一、概念
? ? ? ? ?JDK中提供的文件操作相關的類,但是功能都非常基礎,進行復雜操作時需要做大量編程工作。實際開發中,往往需要
你自己動手編寫相關的代碼,尤其在遍歷目錄文件時,經常用到遞歸,非常繁瑣。
? ? ? ? Apache-commons工具包中提供了IOUtils/FileUtils,可以讓我們非常方便的對文件和目錄進行操作。?
? ? ? ?Apache軟件基金會(也就是Apache Software Foundation,簡稱為ASF),是專門為支持開源軟件項目而辦的一個非盈利性組織。
在它所支持的Apache項目與子項目中,所發行的軟件產品都遵循Apache許可證(Apache License)。 官方網址為:www.apache.org 。
很多著名的Java開源項目都來源于這個組織。比如:commons、kafka、lucene、maven、shiro、struts等技術,以及大數據技術中的
hadoop(大數據第一技術)、hbase、spark、storm、mahout等。
FieUtils類中常用方法的介紹
? ? ??打開FileUtils的api文檔,我們抽出一些工作中比較常用的方法,進行總結和講解。總結如下:
? ? ??cleanDirectory:清空目錄,但不刪除目錄。
? ? ??contentEquals:比較兩個文件的內容是否相同。
? ? ??copyDirectory:將一個目錄內容拷貝到另一個目錄。可以通過FileFilter過濾需要拷貝的 文件。
? ? ??copyFile:將一個文件拷貝到一個新的地址。
? ? ??copyFileToDirectory:將一個文件拷貝到某個目錄下。
? ? ??copyInputStreamToFile:將一個輸入流中的內容拷貝到某個文件。
? ? ??deleteDirectory:刪除目錄。
? ? ??deleteQuietly:刪除文件。
? ? ??listFiles:列出指定目錄下的所有文件。
? ? ??openInputSteam:打開指定文件的輸入流。
? ? ??readFileToString:將文件內容作為字符串返回。
? ? ??readLines:將文件內容按行返回到一個字符串數組中。
? ? ??size:返回文件或目錄的大小。
? ? ??write:將字符串內容直接寫到文件中。
? ? ??writeByteArrayToFile:將字節數組內容寫到文件中。
? ? ??writeLines:將容器中的元素的toString方法返回的內容依次寫入文件中。
? ? ??writeStringToFile:將字符串內容寫到文件中。
【代碼示例】
1 /**練習自己導入包jar包 commons-io 即通用IO jar包,別人造的輪子 2 *FieUtils類 3 * 4 */ 5 package cn.sxt.test; 6 7 import java.io.File; 8 import java.nio.file.Files; 9 import java.util.Collection; 10 11 import org.apache.commons.io.FileUtils; 12 import org.apache.commons.io.filefilter.DirectoryFileFilter; 13 import org.apache.commons.io.filefilter.EmptyFileFilter; 14 import org.apache.commons.io.filefilter.FileFileFilter; 15 import org.apache.commons.io.filefilter.FileFilterUtils; 16 import org.apache.commons.io.filefilter.SuffixFileFilter; 17 18 19 public class Test_0404_CommonsIO_FieUtils { 20 public static void main(String[] args) { 21 //文件的大小,直接用 新jar包中的FileUtils類的sizeOf方法 22 long len=FileUtils.sizeOf(new File("src.txt")); 23 System.out.println(len); 24 25 //目錄的大小 查看lib左邊的lib目錄 26 long len2=FileUtils.sizeOf(new File("lib")); 27 System.out.println(len2); 28 29 30 //3、列出子孫集 31 File file=new File("dest"); 32 //3-1 參數1:放個源文件夾 參數2:過濾器,保留哪一些東西 參數3:是否列出子孫集/null 表示只進行一層 把它們放在容器中去 33 //EmptyFileFilter.NOT_EMPTY:只要非空的 下邊有個empty文件是空的0KB 34 Collection<File> files=FileUtils.listFiles(file, EmptyFileFilter.NOT_EMPTY, null); 35 for (File tempfile : files) {//遍歷輸出絕對路徑, 只遍歷dest下邊的直系文件, 實際上里邊的src文件夾還有東西 36 System.out.println(tempfile.getAbsolutePath()); 37 } 38 System.out.println("-----------"); 39 File file2=new File("dest");//DirectoryFileFilter 目錄過濾 INSTANCE示例 操作子孫集的 40 Collection<File> files2=FileUtils.listFiles(file2, EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE); 41 //3-2、只輸出文件后綴為.html的文件。 Suffix后綴。詞尾 42 Collection<File> files3=FileUtils.listFiles(file2, new SuffixFileFilter("html"), 43 DirectoryFileFilter.INSTANCE); 44 //3-3、or的用法 既要.html的文件又要.jpg的文件 45 Collection<File> files4=FileUtils.listFiles(file2, FileFilterUtils.or( 46 new SuffixFileFilter("html"),new SuffixFileFilter("jpg") ), 47 DirectoryFileFilter.INSTANCE); 48 //3-4、我全都要 and的用法 既是txt文件又是空文件的 49 Collection<File> files5=FileUtils.listFiles(file2, FileFilterUtils.and( 50 new SuffixFileFilter("txt"),EmptyFileFilter.EMPTY ), 51 DirectoryFileFilter.INSTANCE); 52 53 for (File tempfile : files5) {//遍歷輸出絕對路徑, 遍歷dest目錄下的的所有東西 54 System.out.println(tempfile.getAbsolutePath()); 55 } 56 57 58 } 59 60 }?
IOUtils類中常用方法的介紹
? ? 1. buffer方法:將傳入的流進行包裝,變成緩沖流。并可以通過參數指定緩沖大小。
? ? ??2. closeQueitly方法:關閉流。
? ? ??3. contentEquals方法:比較兩個流中的內容是否一致。
? ? ??4. copy方法:將輸入流中的內容拷貝到輸出流中,并可以指定字符編碼。
? ? ??5. copyLarge方法:將輸入流中的內容拷貝到輸出流中,適合大于2G內容的拷貝。
? ? ??6. lineIterator方法:返回可以迭代每一行內容的迭代器。
? ? ??7. read方法:將輸入流中的部分內容讀入到字節數組中。
? ? ??8. readFully方法:將輸入流中的所有內容讀入到字節數組中。
? ? ??9. readLine方法:讀入輸入流內容中的一行。
? ? ??10. toBufferedInputStream,toBufferedReader:將輸入轉為帶緩存的輸入流。
? ? ??11. toByteArray,toCharArray:將輸入流的內容轉為字節數組、字符數組。
? ? ??12. toString:將輸入流或數組中的內容轉化為字符串。
? ? ??13. write方法:向流里面寫入內容。
? ? ??14. writeLine方法:向流里面寫入一行內容。
【代碼示例】
1 /** 2 *IOUtils 操作里邊的內容 3 * 4 */ 5 package cn.sxt.test; 6 7 import java.io.File; 8 import java.io.IOException; 9 import java.net.URL; 10 import java.util.ArrayList; 11 import java.util.List; 12 13 import org.apache.commons.io.FileUtils; 14 import org.apache.commons.io.IOUtils; 15 16 public class Test_0404_CommondIO_IOUtils { 17 public static void main(String[] args) throws IOException { 18 File file=new File("poem.txt"); 19 //1、讀取文件 20 String msg=FileUtils.readFileToString(file,"GBK"); 21 System.out.println(msg); 22 23 //2、看文件的大小 24 byte[] datas=FileUtils.readFileToByteArray(file); 25 System.out.println(datas.length); 26 27 //3、逐行讀取 放在容器中 28 List<String> mList=FileUtils.readLines(file,"GBK"); 29 for (String tempString : mList) { 30 System.out.println(tempString); 31 } 32 33 //4、寫入 3種寫法效果一樣 34 File file2=new File("print.txt"); 35 FileUtils.write(file2, "錦瑟無端五十弦,一弦一柱思華年。\r\n", "GBK",true);//使用GBK字符集,在文件后面追加 36 FileUtils.writeStringToFile(file2, "莊生曉夢迷蝴蝶,望帝春心托杜鵑。\r\n","GBK",true); 37 FileUtils.writeByteArrayToFile(file2, "滄海月明珠有淚,藍田日暖玉生煙。\r\n".getBytes("GBK"),true); 38 39 List<String> dataList=new ArrayList<String>(); 40 dataList.add("大江東去,浪淘盡,千古風流人物。"); 41 dataList.add("故壘西邊,人道是,三國周郎赤壁。"); 42 dataList.add("亂石穿空,驚濤拍岸,卷起千堆雪。"); 43 44 FileUtils.writeLines(file2, dataList,"---",true);//第3個參數是以上3個字符串的連接符,自定義 45 46 //5、單純的復制文件 47 FileUtils.copyFile(new File("SongYi.jpg"),new File("Song2.jpg")); 48 //5-2、復制文件到指定目錄 49 FileUtils.copyFileToDirectory(new File("SongYi.jpg"), new File("dest")); 50 //5-3、文件夾(包括所有子文件)的復制與 把a文件復制到b文件夾下 51 FileUtils.copyDirectory(new File("dest"), new File("dest_copy"));//復制一個dest文件夾,2個平級 52 FileUtils.copyDirectoryToDirectory(new File("dest"), new File("dest2"));//把dest文件夾復制到dest2目錄下,當兒子去 53 54 //5-4、拷貝網絡地址上一張圖片 55 String url="https://www.baidu.com/img/dong_24ac35d79990cac4c1816710e2802ca0.gif"; 56 FileUtils.copyURLToFile(new URL(url), new File("QingMing.gif")); 57 58 //5-5、復制網站的源碼 59 String data2=IOUtils.toString(new URL("http://www.baidu.com"),"UTF-8"); 60 System.out.println(data2); 61 } 62 63 64 }?
轉載于:https://www.cnblogs.com/ID-qingxin/p/10660482.html
總結
以上是生活随笔為你收集整理的[19/04/04-星期四] IO技术_CommonsIO(通用IO,别人造的轮子,FileUtils类 操作文件 IOUtilsl类 操作里边的内容 )...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kali渗透-基础篇
- 下一篇: 【剑指Offer】从尾到头打印链表