[08][01][01] Java I/O流

I/O是什麼

I/O 指的是輸入/輸出(Input/Output),在 Java 中 I/O 操作主要是指使用 Java 進行輸入和輸出操作

I/O分類

IO可以按照數據處理方式分爲以下兩類

  • 流 I/O:傳輸過程是以字節流形式進行的,這樣的設備是不需要緩衝機制的,簡單易用但效率較低
  • 塊 I/O:把數據打包成塊進行傳輸,傳輸基本單位爲塊,傳輸過程中需要緩衝區(buffer)支持,讀寫也是以塊作爲基本單位,效率很高但編程比較複雜

數據流

數據流是一串連續不斷的數據的集合,數據寫入程序可以是一段、一段地向數據流管道中寫入數據,這些數據段會按先後順序形成一個長的數據流

對數據讀取程序來說,看不到數據流在寫入時的分段情況,每次可以讀取其中的任意長度的數據,但只能先讀取前面的數據後,再讀取後面的數據

不管寫入時是將數據分多次寫入,還是作爲一個整體一次寫入,讀取時的效果都是完全一樣的

數據流可以分爲兩類(以內存爲判斷標準)

  • 輸入流:從外界讀取數據寫入內存
  • 輸出流:從內存中讀取數據到外界

I/O體系結構

整個 java.io 包中最重要的就是五個類和一個接口

  • 五個類:File、OutputStream、InputStream、Writer、Reader
  • 一個接口:Serializable

I/O結構體系

在學習過重很容易混淆,分不清是字節流還是字符流,看每個類的最後這個單詞,如果是 Stream 的話就是字節流,如果是 Reader/Writer 的話就是字符流

Java 中字符是採用 Unicode 標準,一個字符是16位,即一個字符使用兩個字節來表示,Java 中引入了處理字符的流

字節流

輸入字節流

InputStream

InputStream 爲字節輸入流,它本身爲一個抽象類,必須依靠其子類實現各種功能,是所有字節輸入流類的超類

繼承自 InputStream 的流都是向程序中輸入數據的,且數據單位爲字節(8bit)

Inputstream類中的常用方法

讀取一個 byte 的數據,返回值是高位補0int 類型值。若返回值= -1說明沒有讀取到任何字節讀取工作結束
public abstract int read()

讀取 b.length 個字節的數據放到b數組中,返回值是讀取的字節數
public int read(byte b[]) 

從輸入流中最多讀取 len 個字節的數據,存放到偏移量爲off的b數組中
public int read(byte b[], int off, int len)
   
返回輸入流中可以讀取的字節數。注意:若輸入阻塞,當前線程將被掛起,如果 InputStream 對象調用這個方法的話,它只會返回0,這個方法必須由繼承 InputStream 類的子類對象調用纔有用
public int available()
   
忽略輸入流中的 n 個字節,返回值是實際忽略的字節數, 跳過一些字節來讀取
public long skip(long n) 
   
我們在使用完後,必須對我們打開的流進行關閉
public int close()

FileInputStream

FileInputStream可以使用read()方法一次讀入一個字節,並以int類型返回,或者是使用read()方法時讀入至一個byte數組,byte數組的元素有多少個,就讀入多少個字節。

在將整個文件讀取完成或寫入完畢的過程中,這麼一個byte數組通常被當作緩衝區,因爲這麼一個byte數組通常扮演承接數據的中間角色。

作用:以文件作爲數據輸入源的數據流。或者說是打開文件,從文件讀數據到內存的類

輸出字節流

字符流

輸入字符流

輸出字符流

非流類

RandomAccessFile

從文件的任意位置進行存取(輸入輸出)操作

File

File類提供了描述文件和目錄的操作與管理方法,主要用於命名文件、查詢文件屬性和處理文件目錄

  • File中常用方法
public boolean exists() 判斷文件或目錄是否存在

public boolean isFile() 判斷是文件還是目錄

public boolean isDirectory() 判斷是文件還是目錄

public String getName() 返回文件名或目錄名

public String getPath() 返回文件或目錄的路徑

public long length() 獲取文件的長度

public String[] list() 將目錄中所有文件名和目錄名保存在字符串數組中返回

public File[] listFiles() 返回某個目錄下所有文件和目錄的絕對路徑,返回的是File數組

public String getAbsolutePath() 返回文件或目錄的絕對路徑

public boolean renameTo(File newFile) 重命名文件
 
public void delete() 刪除文件
 
public boolean mkdir() 創建目錄
 
public boolean createNewFile() 創建文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章