1. 程式人生 > >Java讀寫文件

Java讀寫文件

img mage xxx 字符串 使用方式 print mil lex output

Java主要提供了以下幾個讀寫文件操作:

1、InputStream,OutputStream(字節流)

  1. InputStream in=new FileInputStream("d:\\abc.txt");
  2. OutputStream out=new FileOutputStream("c:\\cba.txt");

註意到,後面實例化是用的FileXXXStream,這是因為java裏面不能夠用InputStream,OutputStream進行實例化,查手冊得知:

InputStream有這些子類:

技術分享圖片

而OutputStream與之類似,有這些直接子類:

技術分享圖片

而FileInputStream的構造方法有如下這些:

技術分享圖片

可以看出,裏面的參數要麽為一個文件路徑,要麽為一個File對象。

而FileOutputStream則與之類似,構造方法如下:

技術分享圖片

雖然參數有所不同,但大體上還是可以總結為:要麽為文件路徑,要麽為File對象。

FileInputStream的讀方法主要有3種,如下所示:

技術分享圖片

技術分享圖片

技術分享圖片

而FileOutputStream的常見方法,如下:

技術分享圖片

技術分享圖片

技術分享圖片

2、BufferedInputStream、BufferedOutputStream(緩存字節流)使用方式和字節流差不多,但是效率更高(推薦使用)

  1. //讀取文件(緩存字節流)
  2. BufferedInputStream in = new BufferedInputStream(new
    FileInputStream("d:\\1.txt"));
  3. //寫入相應的文件
  4. BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\\2.txt"));

對於BufferedInputStream來說,

技術分享圖片

技術分享圖片

其read()方法的用法基本與InputStream的read()一致,只是效率更高

對於BufferedOutputStream來說,

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

牽涉到緩沖區的,註意最後要flush,close,不然最後一點數據就會留在緩沖區中,不會寫入到想要的文件中。

3、InputStreamReader、OutputStreamWriter(字節流轉字符流,這種方式不建議使用,不能直接字節長度讀寫)。使用範圍用做字符轉換

  1. //讀取文件(字節流)
  2. InputStreamReader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
  3. //寫入相應的文件
  4. OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("d:\\2.txt"));

對於InputStreamReader來說,

技術分享圖片

InputStreamReader是從字節流到字符流的橋:它讀取字節,並使用指定的charset將其解碼為字符 。

技術分享圖片

技術分享圖片

技術分享圖片

而對於OutputStreamWriter來說,

OutputStreamWriter是字符的橋梁流以字節流:向其寫入的字符編碼成使用指定的字節charset 。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

4、BufferedReader、BufferedWriter(緩存字符流,提供readLine方法讀取一行文本)

  1. //讀取文件(字符流)
  2. BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK"));//這裏主要是涉及中文
  3. //寫入相應的文件
  4. BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\2.txt"),"GBK"));

對於BufferedReader來說,

字符輸入流讀取文本,緩沖字符,以提供字符,數組和行的高效讀取。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

對於BufferedWriter來說,

技術分享圖片

將文本寫入字符輸出流,緩沖字符,以提供單個字符,數組和字符串的高效寫入。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

5、Reader、PrintWriter(PrintWriter這個很好用,在寫數據的同時可以格式化)

  1. //讀取文件
  2. Reader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
  3. //寫入相應的文件
  4. PrintWriter out = new PrintWriter(new FileWriter("d:\\2.txt"));

對於Reader來說,

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

對於writer來說,

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

總結:InputStream,OutputStream之類的都是字節流,而Reader,Writer之類的都是字符流,而兩者都有的,則是他們的橋梁角色,負責轉換,平時單獨用得少。

Java讀寫文件