java IO流之三 使用緩衝流來讀寫檔案
阿新 • • 發佈:2019-01-23
一、通過BufferedReader和BufferedWriter來讀寫檔案
使用緩衝流的好處是,能夠更高效的讀寫資訊,原理是將資料先緩衝起來,然後一起寫入或者讀取出來。經常使用的是readLine()方法,表示一次讀取一行資料。
package org.example.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestBufferedWriter { public static void main(String[] args) throws Exception { write(); read(); } /** * DOC 讀取資訊. * * @throws FileNotFoundException * @throws IOException */ private static void read() throws FileNotFoundException, IOException { File file = new File("E:\\a.txt");// 指定要讀取的檔案 // 獲得該檔案的緩衝輸入流 BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); String line = "";// 用來儲存每次讀取一行的內容 while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } bufferedReader.close();// 關閉輸入流 } /** * DOC 寫入資訊. * * @throws IOException */ private static void write() throws IOException { File file = new File("E:\\a.txt");// 指定要寫入的檔案 if (!file.exists()) {// 如果檔案不存在則建立 file.createNewFile(); } // 獲取該檔案的緩衝輸出流 BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file)); // 寫入資訊 bufferedWriter.write("你好世界"); bufferedWriter.newLine();// 表示換行 bufferedWriter.write("hello world"); bufferedWriter.flush();// 清空緩衝區 bufferedWriter.close();// 關閉輸出流 } }
二、使用BufferedInputStream和BufferedOuputStream讀寫圖片
使用方式和FileInputStrem和FileOutputStream基本一致:
package org.example.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class TestBufferedString { public static void main(String[] args) throws Exception { // 指定要讀取檔案的緩衝輸入位元組流 BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\test.jpg")); File file = new File("E:\\test.jpg"); if (file != null) { file.createNewFile(); } // 指定要寫入檔案的緩衝輸出位元組流 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); byte[] bb = new byte[1024];// 用來儲存每次讀取到的位元組陣列 int n;// 每次讀取到的位元組陣列的長度 while ((n = in.read(bb)) != -1) { out.write(bb, 0, n);// 寫入到輸出流 } out.close();// 關閉流 in.close(); } }