使用 BufferedWriter 記得輸出文字時 flush()

guile發表於2019-03-05

BufferedWriter 是緩衝輸出流,呼叫 BufferedWriter 的 write() 方法時,文字資料先寫入到緩衝區裡,並沒有直接寫入到目的檔案。

必須呼叫 BufferedWriter 的 flush() 方法,才會清空這個緩衝流,把資料寫入到目的檔案裡。

不使用 flush 方法,直接呼叫 write() 和 close() 方法,不能把文字寫入檔案裡,並且會報錯 java.io.IOException: Stream closed

 

正確的輸出文字的方法:

// writeFile with BufferedWriter 
public static void writeFile(String content, String outputPath){
	File file = new File(outputPath);
	System.out.println("檔案路徑: " + file.getAbsolutePath());

	// 輸出檔案的路徑
	if(!file.getParentFile().exists()){
		file.getParentFile().mkdirs();
	}

	FileOutputStream fos = null;
	OutputStreamWriter osw = null;
	BufferedWriter out = null;

	try {
		// 如果檔案存在,就刪除
		if(file.exists()){
			file.delete();
		}

		file.createNewFile();

		fos = new FileOutputStream(file, true);
		osw = new OutputStreamWriter(fos);
		out = new BufferedWriter(osw);

		out.write(content);

		// 清空緩衝流,把緩衝流裡的文字資料寫入到目標檔案裡
		out.flush();
	}catch(FileNotFoundException e){
		e.printStackTrace();
	}catch(IOException e){
		e.printStackTrace();
	}finally{
		try{
			fos.close();
		}catch(IOException e){
			e.printStackTrace();
		}

		try{
			osw.close();
		}catch(IOException e){
			e.printStackTrace();
		}

		try{
			out.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

 

相關文章