Java IO流學習總結七:Commons IO 2.5-FileUtils

来源:http://www.cnblogs.com/zhaoyanjun/archive/2017/02/14/6396419.html
-Advertisement-
Play Games

Java IO流學習總結七:Commons IO 2.5 FileUtils 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/54972773 本文出自 "【趙彥軍的博客】" 在上面的幾篇文章中,介紹了IO的常規用法,今天介紹 框架的 ...


Java IO流學習總結七:Commons IO 2.5-FileUtils

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/54972773
本文出自【趙彥軍的博客】

在上面的幾篇文章中,介紹了IO的常規用法,今天介紹Commons IO框架的使用。

Commons IO簡介

Apache Commons IO是Apache基金會創建並維護的Java函數庫。它提供了許多類使得開發者的常見任務變得簡單,同時減少重覆代碼,這些代碼可能遍佈於每個獨立的項目中,你卻不得不重覆的編寫。這些類由經驗豐富的開發者維護,對各種問題的邊界條件考慮周到,並持續修複相關bug。最新版本2.5

下載地址:http://commons.apache.org/proper/commons-io/download_io.cgi

這裡寫圖片描述

FileUtils 文件操作工具類

  • 複製文件夾
//複製文件夾(文件夾裡面的文件內容也會複製),file1和file2平級。
//參數1:文件夾; 參數2:文件夾
void copyDirectory( file1 , file2 );  

//複製文件夾到另一個文件夾。 file1是file2的子文件夾.
//參數1:文件夾; 參數2:文件夾
void copyDirectoryToDirectory( file1 , file2 );

//複製文件夾,帶有文件過濾功能
void copyDirectory(File srcDir, File destDir, FileFilter filter)
  • 複製文件
void copyFile(final File srcFile, final File destFile) //複製文件到另外一個文件

void long copyFile(final File input, final OutputStream output) //複製文件到輸出流

void copyFileToDirectory( file1 , file2)  //複製文件到一個指定的目錄

//把輸入流裡面的內容複製到指定文件
void copyInputStreamToFile( InputStream source, File destination)

//把URL 裡面內容複製到文件。可以下載文件。
//參數1:URL資源 ; 參數2:目標文件
void copyURLToFile(final URL source, final File destination)

//把URL 裡面內容複製到文件。可以下載文件。
//參數1:URL資源 ; 參數2:目標文件;參數3:http連接超時時間 ; 參數4:讀取超時時間
void copyURLToFile(final URL source, final File destination,
                                     final int connectionTimeout, final int readTimeout)
                                     

實戰演練

  • 複製文件夾
package com.app;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A1 {

    public static void main(String[] args) {
        String filePath1 = "F:/dd" ;
        File file1 = new File( filePath1 ) ;
        
        String filePath2 = "F:/ee" ;
        File file2 = new File( filePath2 ) ;
        
        try {
            //複製文件夾
            FileUtils.copyDirectory( file1 , file2 );
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
  • 複製文件
String filePath1 = "F:/123.gif" ;
String filePath2 = "F:/abc.gif" ;
        
File file1 = new File( filePath1 ) ;
File file2 = new File( filePath2 ) ;

//複製文件      
FileUtils.copyFile( file1 , file2);
  • 下載文件 copyURLToFile(final URL source, final File destination)
package com.app;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
        String url = "http://imgsrc.baidu.com/baike/pic/item/7aec54e736d12f2ee289bffe4cc2d5628435689b.jpg" ;

        String filePath2 = "F:/abc.jpg" ;
        File file2 = new File( filePath2 ) ;

        try {

            //把伺服器上圖片下載到本地F盤的abc.jpg圖片
            FileUtils.copyURLToFile( new URL( url ) , file2 );

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 把字元串寫入文件
void writeStringToFile(final File file, final String data, final String encoding)

//參數1:需要寫入的文件,如果文件不存在,將自動創建。  參數2:需要寫入的內容
//參數3:編碼格式     參數4:是否為追加模式( ture: 追加模式,把字元串追加到原內容後面)
void writeStringToFile(final File file, final String data, final Charset encoding, final boolean
            append)

小例子

 package com.app;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
        String mes = "下班了" ;

        String filePath2 = "F:/abc.xml" ;
        File file2 = new File( filePath2 ) ;

        try {
            FileUtils.writeStringToFile( file2 , mes , "UTF-8" , true ); 
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 把位元組數組寫入文件
//File:目標文件
//byte[]: 位元組數組
//boolean append : 是否為追加模式
//final int off: 數組開始寫入的位置 ; final int len :寫入的長度

void writeByteArrayToFile(final File file, final byte[] data)

void writeByteArrayToFile(final File file, final byte[] data, final boolean append)

void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len)

void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len,
                                            final boolean append)

小例子

package com.app;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
        String mes = "哈哈,下班了" ;

        String filePath2 = "F:/abc.txt" ;
        File file2 = new File( filePath2 ) ;

        try {
            byte[] mesArray = mes.getBytes() ;
            FileUtils.writeByteArrayToFile( file2 , mesArray );
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 把集合裡面的內容寫入文件
//File file: 目標文件
//Collection<?> lines: 內容集合
//boolean append : 是否為追加模式
//String encoding : 編碼方式,比如"UTF-8" 
//String lineEnding : 每一行以什麼結尾
void writeLines(final File file, final Collection<?> lines)

void writeLines(final File file, final Collection<?> lines, final boolean append)

void writeLines(final File file, final String encoding, final Collection<?> lines)

void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final boolean append)
                                  
void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final String lineEnding)

void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final String lineEnding, final boolean append)

void writeLines(final File file, final Collection<?> lines, final String lineEnding)

void writeLines(final File file, final Collection<?> lines, final String lineEnding,
                                  final boolean append)

小例子1

package com.app;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
        
        ArrayList<String> list = new ArrayList<>() ;
        
        String mes = "哈哈,下班了" ;
        String mes2 = "回家,回家" ;
        
        list.add( mes ) ;  //第一行數據
        list.add( mes2 ) ; //第二行數據

        String filePath2 = "F:/abc.txt" ;
        File file2 = new File( filePath2 ) ;

        try {
            FileUtils.writeLines( file2 , list );
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

結果:
這裡寫圖片描述

小例子2

package com.app;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
        
        ArrayList<String> list = new ArrayList<>() ;
        
        String mes = "哈哈,下班了" ;
        String mes2 = "回家,回家" ;
        
        list.add( mes ) ;
        list.add( mes2 ) ;

        String filePath2 = "F:/abc.txt" ;
        File file2 = new File( filePath2 ) ;

        try {
            //每一行以。結尾
            FileUtils.writeLines( file2 , list, "。");
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

結果:

這裡寫圖片描述

  • 往文件裡面寫內容
/**
* 參數解釋
* File file:目標文件
* CharSequence data : 要寫入的內容
* Charset encoding;String encoding : 編碼格式
* boolean append:是否為追加模式
*/

void write(final File file, final CharSequence data, final Charset encoding)

void write(final File file, final CharSequence data, final String encoding)

void write(final File file, final CharSequence data, final Charset encoding, final boolean append)

void write(final File file, final CharSequence data, final String encoding, final boolean append)

小例子

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
            
        String mes = "哈哈,下班了" ;
        
        String filePath2 = "F:/abc.txt" ;
        File file2 = new File( filePath2 ) ;

        try {
            FileUtils.write( file2 , mes , "utf-8" ,true );
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 文件移動
//文件夾移動,文件夾在內的所有文件都將移動 
void moveDirectory(final File srcDir, final File destDir)

//文件夾移動到另外一個文件內部。boolean createDestDir:如果destDir文件夾不存在,是否要創建一個
void moveDirectoryToDirectory(final File src, final File destDir, final boolean createDestDir)

//移動文件
void moveFile(final File srcFile, final File destFile)

//把文件移動到另外一個文件內部。boolean createDestDir:如果destDir文件夾不存在,是否要創建一個
void moveFileToDirectory(final File srcFile, final File destDir, final boolean createDestDir)

//移動文件或者目錄到指定的文件夾內。
//boolean createDestDir:如果destDir文件夾不存在,是否要創建一個
void moveToDirectory(final File src, final File destDir, final boolean createDestDir)
  • 清空和刪除文件夾
//刪除一個文件夾,包括文件夾和文件夾裡面所有的文件
void deleteDirectory(final File directory)

//清空一個文件夾裡面的所有的內容
void cleanDirectory(final File directory)

//刪除一個文件,會拋出異常
//如果file是文件夾,就刪除文件夾及文件夾裡面所有的內容。如果file是文件,就刪除。
//如果某個文件/文件夾由於某些原因無法被刪除,會拋出異常
void forceDelete(final File file)  

//刪除一個文件,沒有任何異常拋出
//如果file是文件夾,就刪除文件夾及文件夾裡面所有的內容。如果file是文件,就刪除。
//如果某個文件/文件夾由於某些原因無法被刪除,不會拋出任何異常
boolean deleteQuietly(final File file) 
  • 創建文件夾
//創建一個文件夾,如果由於某些原因導致不能創建,則拋出異常
//一次可以創建單級或者多級目錄
void forceMkdir(final File directory)

//創建文件的父級目錄
void forceMkdirParent(final File file)

小例子1

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
            
        String filePath = "F:/123/abc/abc.txt" ;
        File file = new File( filePath ) ;
        
        try {
            //一次可以創建單級或者多級目錄
            FileUtils.forceMkdir(file);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

效果圖:
這裡寫圖片描述

小例子1

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
            
        String filePath = "F:/123/abc/abc.txt" ;
        File file = new File( filePath ) ;
        
        try {
        //創建文件的父級目錄
        FileUtils.forceMkdirParent(file);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

效果:
這裡寫圖片描述

  • 文件獲取輸入/輸出流
//獲取輸入流
FileInputStream openInputStream(final File file)

//獲取輸出流
FileOutputStream openOutputStream(final File file)
  • 讀取文件
//把文件讀取到位元組數組裡面
byte[] readFileToByteArray(final File file)

//把文件讀取成字元串 ;Charset encoding:編碼格式
String readFileToString(final File file, final Charset encoding)

//把文件讀取成字元串 ;String encoding:編碼格式
String readFileToString(final File file, final String encoding)

//把文件讀取成字元串集合 ;Charset encoding:編碼格式
List<String> readLines(final File file, final Charset encoding)

//把文件讀取成字元串集合 ;String encoding:編碼格式
List<String> readLines(final File file, final String encoding)
  • 測試兩個文件的修改時間那個比較新/老
//判斷file文件的修改是否比reference文件新
boolean isFileNewer(final File file, final File reference) 

//判斷file文件的修改是否比 date日期新
boolean isFileNewer(final File file, final Date date)

//判斷file文件的修改是否比 timeMillis 毫秒值新
boolean isFileNewer(final File file, final long timeMillis) 

//判斷file文件的修改是否比reference文件老
boolean isFileOlder(final File file, final File reference)

//判斷file文件的修改是否比 date日期老
boolean isFileOlder(final File file, final Date date)

//判斷file文件的修改是否比 timeMillis 毫秒值老
boolean isFileOlder(final File file, final long timeMillis)
  • 其他
//判斷文件夾內是否包含某個文件或者文件夾
boolean directoryContains(final File directory, final File child)

//獲取文件或者文件夾的大小
long sizeOf(final File file) 

//獲取臨時目錄文件
File getTempDirectory()

//獲取臨時目錄路徑
String getTempDirectoryPath() 

//獲取用戶目錄文件  
File getUserDirectory()

//獲取用戶目錄路徑  
static String getUserDirectoryPath()

//如果不存在,新建文件或者創建單級目錄或者多級目錄    
//如果存在,修改文件修改時間   
void touch(final File file)

//比較兩個文件內容是否相同
boolean contentEquals(final File file1, final File file2)

小例子

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 {

    public static void main(String[] args) {
            
        String filePath = "F:/123" ;
        File file = new File( filePath ) ;
        
        File child = new File("F:/123/abc/123.txt") ;
        
        try {
            boolean hasChild = FileUtils.directoryContains( file , child) ;
            System.out.println( hasChild );
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

效果圖
這裡寫圖片描述


個人微信號:zhaoyanjun125 , 歡迎關註





您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、封裝: 封裝是實現面向對象程式設計的第一步,封裝就是將數據或函數等集合在一個個的單元中(我們稱之為類)。被封裝的對象通常被稱為抽象數據類型。 封裝的意義: 封裝的意義在於保護或者防止代碼(數據)被我們無意中破壞。在面向對象程式設計中數據被看作是一個中心的元素並且和使用它的函數結合的很密切,從而保 ...
  • 如果一個方法中包含多個布爾類型的參數,一是方法不容易理解,二是調用時容易出錯。 重構前代碼 重構後代碼 重構後,將原來方法改為private防止外部調用,而暴露出命名良好的方法供調用。 ...
  • 今天我們來講一下單例模式,下麵我們來用winform來做一個簡單的展示,就是點擊一個菜單,彈出另一個窗體(做成父子窗體的形式)。 建一個窗體(父窗體),拖一個MenuStrip,再建一個窗體(子窗體)。 然後: 現在,我們看一下執行結果。 我們可以看到,每次我們點擊一下工具,都會彈出一個新的窗體,我 ...
  • 1.概念理解 1.1 IoC,(Inverse of Control)控制反轉,其包含兩個內容:其一是控制,其二是反轉。在程式中,被調用類的選擇控制權從調用它的類中移除,轉交給第三方裁決(反轉)。這個第三方指的就是Autofac,Spring,Unity等的容器。IoC另解,依賴註入(Depende ...
  • 今天我們來講一下迭代器模式。 什麼叫迭代器模式呢?迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。 什麼時候考慮用迭代器模式呢?當你需要訪問一個聚焦對象,而且不管這些對象是什麼都需要遍歷的時候,你就應該考慮用迭代器模式。 好,下麵我們看一下迭代器的基本代碼: 客 ...
  • Android 其實無法做多絕對的不被後臺kill掉,我們只能儘量使用一些操作提升不被kill的機會。 一、onStartCommand方法,返回START_STICKY START_STICKY 在運行onStartCommand後service進程被kill後,那將保留在開始狀態,但是不保留那些 ...
  • 修改背光改變區間 kernel\drivers\video\backlight\pwm_bl.c ...
  • 一點公益app開發,聯繫微電188-2624-7572. 站在互聯網的風口,任何商業模式拼的都是速度。一點公益項目平臺、一點公益APP受追捧是有原因的:一點公益平臺倡導的“互聯網+公益”模式,商家直接讓利給公益平臺,平臺通過大數據計算分析,進行財富的二次分配。這種讓利幅度之大,持續之久,是傳統商業模 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...