Java輸出流FileOutputStream使用詳解


前面介紹了如何應用輸入流FileInputStream從本地文件讀取數據。本節介紹應用輸出流FileOutputStream把數據寫入本地文件。

用FileOutputStream寫入文件流程如下:

使用FileOutputStream寫入文件的過程同使用FileInputStream過程相同,都是先用File類打開本地文件,實例化輸入輸出流,然后調用流的讀寫方法讀取或寫入數據,最后關閉流。

FileOutputStream的構造方法

FileOutputStream提供了4個常用構造方法,用於實例化FileOutputStream對象,不同的場景使用不同的構造方法。

場景1:使用File對象打開本地文件,從文件讀取數據。

場景2:不使用File對象,直接傳入文件路徑。

FileOutputStream的構造方法允許直接傳入文件路徑,而無須使用File對象。查看該構造方法的源代碼,其內部使用了File對象打開文件。

場景3:打開文件,在文件的尾部追加寫入數據。

場景要求在文件的尾部寫入數據,由於前面兩個構造函數都是文件開始寫入數據(覆蓋原文件),因此不能使用前面2個場景的構造函數。FileOutputStream提供了另外兩個構構造方法,分別是:

FileOutputStream(File file, boolean append);

FileOutputStream(String name, boolean append);

同前面的構造方法相比,這兩個構造方法各多了一個boolean參數append。append參數為true時,數據從文件尾部寫入;append參數為false時,數據覆蓋原文件。

FileOutputStream的寫入方法

FileOutputStream類提供了多種文件寫入方法,可以單獨寫一個字節到文件,也可以寫一個byte數組到文件,也可以取byte數組的部分數據寫入到文件。

例1:使用write(int b)方法寫入文件。

例子程序首先調用File類的createNewFile()創建new.txt文件,然后將str內容寫入到新創建的new.txt文件中。

例2:使用write(byte[] b)方法寫入文件。

write(byte[] b)方法用於將b.length個字節從指定的byte數組寫入到輸出流。

String類的getBytes()方法可以將字符串轉換為byte數組,使用FileOutputStream 類的write(byte[] b)方法,將轉換的byte數組寫入文件。

例3:使用write(byte[] b,int off,int len)方法寫入文件。

該方法將len個字節的數據,並從數組b的off位置開始寫入到輸出流。

程序把指定的str內容寫入到文件,fos.write(str.getBytes(),5,10)語句的第一個參數為byte數組,第二個參數5是從byte數組的下標5開始,第三個參數是寫入的字節數。程序執行后,寫入的內容為“is new file”。

使用該方法一定要注意數組越界的問題。例如,byte數組長度為20,從第下標12開始,寫入15個字節到文件,就會造成數組越界,程序報錯。

例4:使用FileOutputStream復制文件

復制文件是將源文件數據寫入到新文件,在實際編程中,實現文件的復制有很多種方法,本案例使用FileInputStream和FileOutputStream實現文件的復制。

代碼中的copyFile完成文件的復制,在復制之前,先判斷一下源文件是否存在,然后申請一個byte數組,用於存儲讀取的源文件數據,該數組大小與源文件總字節數相同,讀取成功后,再將數組內容寫入到目標文件。程序輸出結果如下圖所示:

■ 知識點撥

使用FileOutputStream流可以寫入字節數據到目標文件,FileOutputStream提供了單字節寫入和byte數組寫入兩種方式。建議使用byte數組寫入,將待寫入的數據存儲到一個byte數組中,然后再寫入文件。當寫入的文件已經存在時,需要指明寫入方式是覆蓋還是追加。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM