1. 程式人生 > 程式設計 >Java如何基於IO流實現同一檔案讀寫操作

Java如何基於IO流實現同一檔案讀寫操作

1、注意事項

眾所周知,對一個檔案進行讀寫操作時,我們需要建立對應的輸入流和輸出流

但需要注意的是,讀寫操作不能同時進行(邊讀邊寫),即不能同時開啟輸入流和輸出流,直白一點說就是不能同時對同一個檔案的輸入流和輸出流進行賦值,否則影響檔案進行正常的讀寫操作。如果是不同的檔案,則可以邊讀邊寫。

2、那麼我們怎麼對同一個檔案進行讀寫操作呢?

不能邊讀邊寫,但是可以先讀後寫,先寫後讀。

a、先讀後寫

開啟輸入流,對檔案進行讀操作,操作完成之後把輸入流關掉(注意一定要關掉)。然後再開啟輸出流,對檔案進行寫操作,操作完成之後再把輸出流關掉。

b、先寫後讀

原理同上

3、案例(程式碼)

package com.yl.homework.io;
​
import java.io.*;
import java.util.ArrayList;
​
/**
 * (字元流)讀取一個文字檔案,每行都追加一個“好”,在檔案結尾再追加“完畢”。
 */
public class Test3 {
​
  public static void main(String[] args) {
    //檔案物件
    File file=new File("H:\\ioText\\homework.txt");
    //字元緩衝流
    BufferedReader bufferedReader=null;
    BufferedWriter bufferedWriter=null;
    //儲存讀取的內容
    ArrayList<String> arrayList=new ArrayList<>();
    try {
      //開啟輸入流
      bufferedReader=new BufferedReader(new FileReader(file));
      //儲存讀取內容
      String content="";
      //讀取資料
      while ((content=bufferedReader.readLine())!=null){
        System.out.println(content);
        //每行都追加一個“好”
        content+="好";
        //把內容存入arrayList
        arrayList.add(content);
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      //關閉流
      try {
        bufferedReader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    try {
      //開啟輸出流
      bufferedWriter=new BufferedWriter(new FileWriter(file));
      //遍歷arrayList
      for (int i=0;i<arrayList.size();i++){
        //判斷是不是最後一行
        if (i==arrayList.size()-1){
          //寫資料
          bufferedWriter.write(arrayList.get(i));
          //重新整理
          bufferedWriter.flush();
        }else{
          //寫資料
          bufferedWriter.write(arrayList.get(i));
          //換行
          bufferedWriter.newLine();
          //重新整理
          bufferedWriter.flush();
        }
      }
      //在檔案結尾再追加“完畢”
      bufferedWriter.write("完畢");
      //重新整理檔案
      bufferedWriter.flush();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
        //關閉流
        bufferedWriter.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。