程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程那些事兒88——文件操作之寫文件

Java編程那些事兒88——文件操作之寫文件

編輯:關於JAVA

11.3.1.4 寫文件

如前所述,將程序內部的數據輸出到程序外部的數據源,應該使用IO類體系中的輸出流。在實際的編程中,將程序中的數據,例如用戶設定或程序運行時生成的內容,存儲到外部的文件中,應該使用輸出流進行編程。

基本的輸出流包含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類的這種設計形式,只需要熟悉該體系中的某一個類的使用以後,就可以觸類旁通的學會其它相同類型的類的使用,從而簡化程序員的學習,使得使用時保持統一。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved