File類:java.io包中定義了一個File類來專門表示文件,并獲取文件的有關信息卖哎。File類可以用來獲取或設置文件及目錄的屬性鬼悠,但它不支持從文件讀取數(shù)據(jù)或往文件里面寫數(shù)據(jù)這些操作
流的概念:JAVA作為一門面向對象的語言。采用了面向對象的概念來解決了程序與眾多外部設備進行交互的問題亏娜。JAVA把與任何外部設備打交道的這一過程抽象為數(shù)據(jù)流來表示焕窝。數(shù)據(jù)流的兩端分別是數(shù)據(jù)源端和數(shù)據(jù)宿端。
數(shù)據(jù)流可以按兩種形式來進行分類:
按流內的數(shù)據(jù)格式分:字節(jié)流(以機器使用的字節(jié)格式來表示流內的數(shù)據(jù))和字符流(以人類易讀的格式來表示數(shù)據(jù)维贺,文本文件中表示的字符)
按流的方向:輸入流和輸出流
字節(jié)輸入輸出流:InputStream是字節(jié)輸入流的父類它掂,OutputStream是字節(jié)輸出流的父類。(其中的子類不一一說明溯泣,只是要記住FilterInputStream是用于對從其他輸入流中讀取的數(shù)據(jù)提供一些額外的功能虐秋,其子類有DataOutputStream、BufferedOutputStream,PrintStream)
InputStream類
read()方法被調用時垃沦,若當前的輸入流中并沒有立即可用的數(shù)據(jù)客给,那么這個調用操作會被阻塞,直到當前輸入流成功地完成數(shù)據(jù)的準備為止(通常敲一個回車鍵)
在InputStream中還有一個控制方法available()肢簿,該方法的作用在于告訴輸入流的使用者靶剑,在不產生阻塞的情況下,數(shù)據(jù)流中還有多少字節(jié)可供讀取池充。如果每次只讀取調用available()方法獲取到的字節(jié)數(shù)桩引,那么讀取操作肯定不會被阻塞。
FileInputStream類
文件輸入流主要用于對文件的操作收夸。當用字節(jié)輸入流從文件中讀入數(shù)據(jù)時坑匠,創(chuàng)建愛你的FileInputStream對象用來表示要輸入的文件流。在創(chuàng)建文件輸入流對象的時候咱圆,可以用文件名笛辟,或者File對象功氨,或者 FileDescription對象作為參數(shù)。
OutputStream類
write()方法三種類型的區(qū)別與InputStream類似手幢。這三個方法都沒有返回值捷凄,如果沒有發(fā)生異常,就可以認為數(shù)據(jù)成功寫出了围来。write()方法也是采用”阻塞式“寫方式跺涤。只有當所有數(shù)據(jù)成功寫出或者發(fā)生了異常,write方法才執(zhí)行接受监透,程序才可以執(zhí)行后面的代碼桶错。這里可以用多線程解決這里的阻塞式的問題。
FileOutputStream類
向一個文件寫數(shù)據(jù)時胀蛮,可創(chuàng)建一個FileOutputStream對象來表示要輸出的文件流院刁。FileOuputStream對象默認會以新建文件的方式開啟輸出流。如果指定的文件已經存在粪狼,則原文件的內容會被覆蓋退腥。如果想以附加的模式來寫入文件,則可以在構造方法后面加一個true再榄。
字符輸入輸出流
Reader類和Write類分別表示字符輸入流和字符輸出流的父類狡刘。他們都提供了對16位Unicode字符的處理能力,因此常用于文本信息的讀寫困鸥。在Reader和Writer類中嗅蔬,分別定義了用于讀數(shù)據(jù)的reader()方法和用于寫數(shù)據(jù)的write()方法。他們的形式和功能都和前面字節(jié)流的相似疾就。
FileReader類和FileWriter類
InputStreamReader和OutputStreamWriter類都是用于字符和字節(jié)的轉換的澜术。
DataInputStream類是專門讀取使用DataOutputStream類輸出的數(shù)據(jù)。通過DataInputStream和DataOutputStram類虐译,可按數(shù)據(jù)的類型為單位對文件進行讀寫瘪板。而不是以字節(jié)或字符為單位讀寫吴趴。
帶緩存的輸入流和輸出流
BufferedInoutStream與BufferdOutputStream類分別是FilterInputStream和FilterOutputStream類的子類漆诽。他們都是為一個基本的字節(jié)輸入或輸出流添加額外的一些功能。
構建這兩個類時锣枝,都需要給定一個輸入輸出字節(jié)流
BufferedReader與BufferdOutWriter類分別是Reader和Writer類的子類厢拭。他們都是為一個基本的字節(jié)輸入或輸出流添加額外的一些功能。
構建這兩個類時撇叁,都需要給定一個輸入輸出字符流
標準輸入輸出流的重定向
標準輸入流:System.in這個流對應于鍵盤輸入
標準輸出流:System.out這個流對應與屏幕輸出
標準錯誤流:System.err這個流對應于屏幕輸出
標準輸入指的是從鍵盤輸入供鸠,而標準輸出指的是咋控制器顯示出來。我們常用System.in和System.out對象來實現(xiàn)標準的輸入和輸出陨闹。實際上楞捂,標準輸入和輸出流可以和其他文件相關聯(lián)薄坏,實現(xiàn)重定向。
隨機訪問
java.io包中的RandomAccessFile類提供了對文件的讀寫功能寨闹,與普通的輸入輸出流不一樣的是胶坠,RandomAccessFile可以任意地訪問文件的任何位置。這就是隨機訪問的意義所在繁堡。這里也是字節(jié)流