IO 流相關

hzcya911發表於2020-10-26

IO 操作包括讀和寫,應用的場景主要包括網路操作和檔案操作,原生的 Java 類庫區分字元流和位元組流,位元組流 InputStream 和 OutputStream 就有很多很多種,使用起來讓人頭皮發麻。

Hutool 封裝了流操作工具類 IoUtil、檔案讀寫操作工具類 FileUtil、檔案型別判斷工具類 FileTypeUtil 等等。

BufferedInputStream in = FileUtil.getInputStream("hutool/origin.txt");
BufferedOutputStream out = FileUtil.getOutputStream("hutool/to.txt");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);
複製程式碼

在 IO 操作中,檔案的操作相對來說是比較複雜的,但使用頻率也很高,幾乎所有的專案中都躺著一個叫 FileUtil 或者 FileUtils 的工具類。Hutool 的 FileUtil 類包含以下幾類操作:

  • 檔案操作:包括檔案目錄的新建、刪除、複製、移動、改名等
  • 檔案判斷:判斷檔案或目錄是否非空,是否為目錄,是否為檔案等等
  • 絕對路徑:針對 ClassPath 中的檔案轉換為絕對路徑檔案
  • 檔名:主檔名,副檔名的獲取
  • 讀操作:包括 getReader、readXXX 操作
  • 寫操作:包括 getWriter、writeXXX 操作

順帶說說 classpath。

在實際編碼當中,我們通常需要從某些檔案裡面讀取一些資料,比如配置檔案、文字檔案、圖片等等,那這些檔案通常放在什麼位置呢?

放在專案結構圖中的 resources 目錄下,當專案編譯後,會出現在 classes 目錄下。對應磁碟上的目錄如下圖所示:

當我們要讀取檔案的時候,我是不建議使用絕對路徑的,因為作業系統不一樣的話,檔案的路徑識別符號也是不一樣的。最好使用相對路徑。

假設在 src/resources 下放了一個檔案 origin.txt,檔案的路徑引數如下所示:

FileUtil.getInputStream("origin.txt")
複製程式碼

假設檔案放在 src/resources/hutool 目錄下,則路徑引數改為:

FileUtil.getInputStream("hutool/origin.txt")
複製程式碼