File类 读取文件
基本的輸出流包含OutputStream和Writer兩個,區別是OutputStream體系中的類(也就是OutputStream的子類)是按照字節寫入的,而Writer體系中的類(也就是Writer的子類)是按照字符寫入的。
?????????使用輸出流進行編程的步驟是:
?????????????????? 1、建立輸出流
????????????????????????????建立對應的輸出流對象,也就是完成由流對象到外部數據源之間的轉換。
?????????????????? 2、向流中寫入數據
????????????????????????????將需要輸出的數據,調用對應的write方法寫入到流對象中。
?????????????????? 3、關閉輸出流
????????????????????????????在寫入完畢以后,調用流對象的close方法關閉輸出流,釋放資源。
?????????在使用輸出流向外部輸出數據時,程序員只需要將數據寫入流對象即可,底層的API實現將流對象中的內容寫入外部數據源,這個寫入的過程對于程序員來說是透明的,不需要專門書寫代碼實現。
?????????在向文件中輸出數據,也就是寫文件時,使用對應的文件輸出流,包括FileOutputStream和FileWriter兩個類,下面以FileOutputStream為例子說明輸出流的使用。示例代碼如下:
? ?
import java.io.*;/*** 使用FileOutputStream寫文件示例*/ public class WriteFile1 {public static void main(String[] args) {String s = "Java語言";int n = 100;//聲明流對象FileOutputStream fos = null;try{//創建流對象fos = new FileOutputStream("e:\\out.txt");//轉換為byte數組byte[] b1 = s.getBytes();//換行符byte[] b2 = "\r\n".getBytes();byte[] b3 = String.valueOf(n).getBytes();//依次寫入文件fos.write(b1);fos.write(b2);fos.write(b3);} catch (Exception e) {e.printStackTrace();}finally{try{fos.close();}catch(Exception e){}}} }該示例代碼寫入的文件使用記事本打開以后,內容為:
?????????????????? Java語言
100
?????????在該示例代碼中,演示了將一個字符串和一個int類型的值依次寫入到同一個文件中。在寫入文件時,首先創建了一個文件輸出流對象fos:
?????????????????? fos = new FileOutputStream("e:\\out.txt");
?????????該對象創建以后,就實現了從流到外部數據源e:\out.txt的連接。說明:當外部文件不存在時,系統會自動創建該文件,但是如果文件路徑中包含未創建的目錄時將出現異常。這里書寫的文件路徑可以是絕對路徑也可以是相對路徑。
?????????在 實際寫入文件時,有兩種寫入文件的方式:覆蓋和追加。其中“覆蓋”是指清除原文件的內容,寫入新的內容,默認采用該種形式寫文件,“追加”是指在已有文件 的末尾寫入內容,保留原來的文件內容,例如寫日志文件時,一般采用追加。在實際使用時可以根據需要采用適合的形式,可以使用:
?????????????????? public FileOutputStream(String name, boolean append) throws FileNotFoundException
?????????只需要使用該構造方法在構造FileOutputStream對象時,將第二個參數append的值設置為true即可。
?????????流對象創建完成以后,就可以使用OutputStream中提供的wirte方法向流中依次寫入數據了。最基本的寫入方法只支持byte數組格式的數據,所以如果需要將內容寫入文件,則需要把對應的內容首先轉換為byte數組。
?????????這里以如下格式寫入數據:首先寫入字符串s,使用String類的getBytes方法將該字符串轉換為byte數組,然后寫入字符串“\r\n”,轉換方式同上,該字符串的作用是實現文本文件的換行顯示,最后寫入int數據n,首先將n轉換為字符串,再轉換為byte數組。這種寫入數據的順序以及轉換為byte數組的方式就是流的數據格式,也就是該文件的格式。因為這里寫的都是文本文件,所以寫入的內容以明文的形式顯示出來,也可以根據自己需要存儲的數據設定特定的文件格式。
?????????其實,所有的數據文件,包括圖片文件、聲音文件等等,都是以一定的數據格式存儲數據的,在保存該文件時,將需要保存的數據按照該文件的數據格式依次寫入即可,而在打開該文件時,將讀取到的數據按照該文件的格式解析成對應的邏輯即可。
?????????最后,在數據寫入到流內部以后,如果需要立即將寫入流內部的數據強制輸出到外部的數據源,則可以使用流對象的flush方法實現。如果不需要強制輸出,則只需要在寫入結束以后,關閉流對象即可。在關閉流對象時,系統首先將流中未輸出到數據源中的數據強制輸出,然后再釋放該流對象占用的內存空間。
?????????使用FileWriter寫入文件時,步驟和創建流對象的操作都和該示例代碼一致,只是在轉換數據時,需要將寫入的數據轉換為char數組,對于字符串來說,可以使用String中的toCharArray方法實現轉換,然后按照文件格式寫入數據即可。
?????????對于其它類型的字節輸出流/字符輸出流來說,只是在邏輯上連接不同的數據源,在創建對象的代碼上會存在一定的不同,但是一旦流對象創建完成以后,基本的寫入方法都是write方法,也需要首先將需要寫入的數據按照一定的格式轉換為對應的byte數組/char數組,然后依次寫入即可。
?????????所以IO類的這種設計形式,只需要熟悉該體系中的某一個類的使用以后,就可以觸類旁通的學會其它相同類型的類的使用,從而簡化程序員的學習,使得使用時保持統一。
總結
以上是生活随笔為你收集整理的File类 读取文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: File类3 文件读取
- 下一篇: BufferedReader和Buffe