1. 程式人生 > 其它 >I/O流筆記(源:黑馬程式設計師)

I/O流筆記(源:黑馬程式設計師)

I/O流
File:它是檔案和目錄路徑名的抽象表示
檔案和目錄是可以通過File封裝成物件的
對於File而言,其封裝的並不是一個真正存在的檔案,僅僅是一個路徑名而已。
它可以是存在的,也可以是不存在的。
將來是要通過具體的操作把這個路徑的內容轉換為具體存在的
構造方法:
File(String pathname)通過將給定的路徑名字串轉換為抽象路徑名來建立新的File例項
File(String parent,String child)從父路徑名字串和子路徑名字串建立新的File例項
File(File parent,String child)從父抽象路徑名和子路徑名字串建立新的File例項
建立功能:
public boolean createNewFile()當具有該名稱的檔案不存在時,建立一個由該抽象路徑名命名的新空檔案
public boolean mkdir()建立由此抽象路徑名命名的目錄
public boolean mkdirs()建立由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄
判斷和獲取功能
public boolean isDirectory()測試此抽象路徑名錶示的File是否為目錄
public boolean isFile()測試此抽象路徑名錶示的File是否為檔案
public boolean exits()測試此抽象路徑名錶示的File是否為檔案
public String getAbsolutePath()返回此抽象路徑名的絕對路徑名字串
public String getPath()將此抽象路徑名轉換為路徑名字串
public String getName()返回由此抽象路徑名錶示的檔案或目錄的名稱
public String[] list()返回此抽象路徑名錶示的目錄中的檔案和目錄的名稱字串陣列
public File[] listFiles()返回此抽象路徑名錶示的目錄中的檔案和目錄的File物件陣列
刪除功能
public boolean delete()刪除由此抽象路徑名錶示的檔案或目錄
絕對路徑:完整的路徑名
相對路徑:必須使用取自其他路徑名的資訊進行解釋
注意事項:如果一個目錄中有內容(目錄,檔案),不能直接刪除,應該先刪除目錄中的內容,最後才能刪除目錄
位元組流
IO流分類:
按照資料的流向:輸入流(讀資料);輸出流(寫資料)
按照資料型別來分:位元組流:位元組輸入流;位元組輸出流
字元流:字元輸入流;字元輸出流
如果資料通過Windows自帶的記事本軟體開啟,還可以讀懂內容,就使用字元流
否則使用位元組流,如果不知道,使用位元組流
位元組流寫資料
位元組流抽象基類
InputStream:這個抽象類是表示位元組輸入流的所有類的超類
OutputStream:這個抽象類是表示位元組輸出流的所有類的超類
子類名特點:子類名稱都是以其父類名作為子類名的字尾
FileOutPutStream:檔案輸出流用於將資料寫入File
FileOutputStream:建立檔案輸出流以指定的名稱寫入檔案
使用位元組輸出流寫資料的步驟
建立位元組輸出流物件(呼叫系統功能建立了檔案,建立位元組輸出流物件,讓位元組輸出流物件指向檔案)
呼叫位元組輸出流物件的寫資料方法
釋放資源(關閉此檔案輸出流並釋放與此流相關聯的任何系統資源)
位元組流寫資料的三種方式
void write(int b)將指定的位元組寫入此檔案輸出流,一次寫一個位元組資料
void write(byte[] b)將b.length位元組從指定的位元組陣列寫入此檔案輸出流,一次寫一個位元組陣列資料
void write(byte[] b,int off,int len)將len位元組從指定的位元組陣列開始,從偏移量off開始寫入此檔案輸出流
一次寫一個位元組陣列的部分資料
位元組流讀資料(一次讀一個位元組資料)
FileInputStream:從檔案系統中的檔案獲取輸入位元組
FileInputStream(String name):通過開啟與實際檔案的連線來建立一個FileInputStream,
該檔案由檔案系統中的路徑名name命名
使用位元組輸入流讀資料的步驟:
建立位元組輸入流物件
呼叫位元組輸入流物件的讀資料方法
釋放資源
位元組流讀資料(一次讀一個位元組陣列資料)
步驟:
建立位元組輸入流物件
呼叫位元組輸入流物件的讀資料方法
釋放資源
位元組緩衝流
BufferOutputStream:該類實現緩衝輸出流,通過設定這樣的輸出流,應用程式可以向底層輸出流寫入資料,
而不必為寫入的每個位元組導致底層系統的呼叫
BufferInputStream:建立BufferedInputStream將建立一個內部緩衝區陣列,當從流中讀取或跳過位元組時,
內部緩衝區將根據需要從所包含的輸入流中重新填充,一次很多位元組
構造方法:
位元組緩衝輸出流:BufferedOutputStream(OutputStream out)
位元組緩衝輸入流:BufferedInputStream(InputStream in)
字元流
由於位元組流操作中文不方便,所以Java提供字元流
字元流 = 位元組流+編碼表
字串中的編碼解碼問題
編碼:
byte[] getByte()使用平臺的預設字符集將該String編碼為一系列位元組,將結果儲存到新的位元組陣列中
byte[] getByte(String charsetName)使用指定的字符集將該String編碼為一系列位元組,將結果儲存到新的位元組陣列中
解碼:
String(byte[] bytes)通過使用平臺的預設字符集解碼指定的位元組陣列來構造新的String
String(byte[] bytes,String charsetName)通過指定的字符集解碼指定的位元組陣列來構造新的String
字元流中的編碼解碼問題
字元流抽象基類
Reader:字元輸入流的抽象類
Writer:字元輸出流的抽象類
字元流中和編碼解碼問題相關的兩個類
InputStreamReader
OutputStreamWriter
字元流寫資料的5種方式
void write(int c)寫一個字元
void write(char[] cbuf)寫一個字元陣列
void write(char[] cbuf,int off,int len)寫入字元陣列的一部分
void write(String str)寫一個字串
void write(String str,int off,int len)寫一個字串的一部分
字元流讀資料的2種方式
int read()一次讀一個字元資料
int read(char[] cbuf)一次讀一個字元陣列資料
簡化書寫
轉換流的名字比較長,而我們常見的操作都是按照本地預設編碼實現的,為了簡化書寫,轉換流提供了對應的子類
FileReader:用於讀取字元檔案的便捷類FileReader(String fileName)
FileWriter:用於寫入字元檔案的便捷類FileWriter(String fileName)
涉及到編碼解碼問題,還應該使用轉換流:InputStreamReader/OutputStreamWriter
字元緩衝流
BufferedWriter:將文字寫入字元輸出流,緩衝字元,以提供單個字元、陣列和字串的高效寫入,
可以指定緩衝區大小,或者可以接受預設大小。預設值足夠大,可用於大多數用途
BufferedReader:從字元輸入流讀取文字,緩衝字元,以提供字元、陣列和行的高效讀取,
可以指定緩衝區大小,或者可以使用預設大小。預設值足夠大,可用於大多數用途
構造方法:
BufferedWriter(Writer out)
BufferedReader(Reader in)
字元緩衝流特有功能
BufferedWriter:void newLine()寫一行行分隔符,行分隔符字串由系統屬性定義
BufferedReader:public String readLine()讀一行文字,結果包含行的內容的字串,不包括任何行終止字元
如果流的結尾已經到達,則為null
I/O小結
位元組流
位元組輸入流InputStream(抽象類)
讀資料
int read()一次讀取一個位元組
int read(byte[] bys)一次讀取一個位元組陣列
FileInputStream
BufferedInputStream
位元組輸出流OutputStream(抽象類)
寫資料
void write(int by)一次寫一個位元組
void write(byte[] bys,int index,int len)一次寫一個位元組陣列的一部分
FileOutputSteam
BufferedOutputStream
位元組流可以複製任意檔案資料,有4種方式一般採用位元組緩衝流一次讀寫一個位元組陣列的方式
字元流
字元輸入流Reader
讀資料
int read()一次讀取一個字元
int read(char[] chs)一次讀取一個字元陣列
InputStreamReader-----(簡化)-------FileReader
BufferedReader
String readerLine()一次讀取一個字串
字元輸出流Writer
寫資料
void write(int ch)一次寫一個字元
void write(char[] chs,int index,int len)一次寫一個字元陣列的一部分
OutputStreamWriter------(簡化)-------FileWriter
BufferedWriter
void newLine()寫一個換行符
void write(String line)一次寫一個字串
字元流只能複製文字資料,有5種方式,一般採用字元緩衝流的特有功能