IO流的【字元流】
阿新 • • 發佈:2019-01-26
package com.superb.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class TestReaderOrWrite { public static void main(String[] args) throws IOException { // OutputStreamWriter(); // FileWriter(); // BufferedWriter(); copy4(); } /*** * OutputStreamWriter 將記憶體中的資料寫入檔案的5中方式如下: * * 寫入結果:ac * * @throws IOException */ // 寫入單個字元。要寫入的字元包含在給定整數值的 16 個低位中,16 高位被忽略。 static void OutputStreamWriter() throws IOException { java.io.OutputStreamWriter writer = new java.io.OutputStreamWriter( new FileOutputStream(new File("F:\\java\\io\\test\\iiiiii.txt"))); // 寫入單個字元。要寫入的字元包含在給定整數值的 16 個低位中,16 高位被忽略。 writer.write(97); writer.write('c'); writer.write("\r\n"); // 寫入字元陣列 char[] c = new char[] { '我', '是', '爹' }; writer.write(c); writer.write("\r\n"); // 寫入字元陣列的某一部分。 writer.write(c, 0, 2); writer.write("\r\n"); // 寫入字串 String str = "嘻嘻哈哈"; writer.write(str); writer.write("\r\n"); // 寫入字串的某一部分。 writer.write(str, 0, 2); writer.flush(); writer.close(); } /** * FileWriter:類從OutputStreamWriter類繼承而來。該類按字元向流中寫入資料,可以關聯原始檔。主要夠造函式: * * @throws IOException */ static void FileWriter() throws IOException { String fileName = "F:\\java\\io\\test\\iiiiii.txt"; // 建立字元輸出流類物件和已存在的檔案相關聯。檔案不存在的話,並建立。 // 如:FileWriter fw = new // FileWriter("C:\\demo.txt"); FileWriter fw = new FileWriter(fileName); // 建立字元輸出流類物件和已存在的檔案相關聯,並設定該該流對檔案的操作是否為續寫。 // 如:FileWriter fw = new FileWriter("C:\\demo.txt",ture); // //表示在fw對檔案再次寫入時,會在該檔案的結尾續寫,並不會覆蓋掉。 FileWriter fw1 = new FileWriter(fileName, true); fw.write("fileWirter天假"); fw1.write("----後面追加"); fw.flush(); fw1.flush(); fw.close(); fw1.close(); } /** * BufferedWriter(緩衝流):位元組輸出緩衝流,將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元、陣列和字串的高效寫入。 * 可以指定緩衝區的大小,或者接受預設的大小。在大多數情況下,預設值就足夠大了。 該類提供了 newLine() * 方法,它使用平臺自己的行分隔符概念,此概念由系統屬性 line.separator * 定義。該類寫入文字的方法就是父類Writer提供的write()系列方法,在這裡我們演示他特有的newLine( )方法。 * * @throws IOException */ static void BufferedWriter() throws IOException { BufferedWriter bw = new java.io.BufferedWriter(new FileWriter(new File("F:\\java\\io\\test\\iiiiii.txt"))); bw.write("我的哈哈哈哈哈"); bw.newLine(); bw.write("換到下一行"); bw.flush(); bw.close(); } // copy檔案的幾種方式 /** * 使用轉換流copy檔案: 在這裡使用了指定編碼方式的物件,一般我們使用平臺預設編碼方式的夠造函式建立物件 * InputStreamReader 與 OutputStreamWriter讀寫 * * @throws IOException */ static void copy1() throws IOException { InputStreamReader reader = new InputStreamReader( new FileInputStream(new File("F:\\java\\io\\test\\iiiiii.txt"))); OutputStreamWriter writer = new java.io.OutputStreamWriter( new FileOutputStream(new File("F:\\java\\io\\test\\pppppp.txt"))); int len = 0; // 逐個讀寫 // while ((len = reader.read()) != -1) { // writer.write((char) len); // } // 緩衝讀寫 char[] c = new char[1024]; while ((len = reader.read(c)) != -1) { writer.write(c, 0, len); writer.flush(); } writer.flush(); writer.close(); reader.close(); } /** * 使用關聯原始檔的字元流copy檔案: * * @throws IOException * FileReader 與 FileWriter 讀寫 * */ static void copy2() throws IOException { FileReader reader = new FileReader(new File("F:\\java\\io\\test\\iiiiii.txt")); FileWriter writer = new FileWriter(new File("F:\\java\\io\\test\\bbbbbbbbb.txt")); char[] c = new char[1024]; int len = 0; while ((len = reader.read(c)) != -1) { writer.write(c, 0, len); writer.flush(); } writer.close(); } /** * 使用緩衝流特定的行方法(readLine(),newLine() )實現檔案的copy * * @throws IOException */ static void copy3() throws IOException { BufferedReader br = new BufferedReader(new FileReader(new File("F:\\java\\io\\test\\iiiiii.txt"))); BufferedWriter wr = new BufferedWriter(new FileWriter(new File("F:\\java\\io\\test\\mmmmmmmmm.txt"))); String str = null; while ((str = br.readLine()) != null) { wr.write(str); wr.newLine(); wr.flush(); } wr.close(); br.close(); } /** * 位元組緩衝流+原始檔字元流實現檔案copy * * @throws IOException */ static void copy4() throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(new File("F:\\java\\io\\test\\iiiiii.txt")))); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(new File("F:\\java\\io\\test\\hhhhhhhh.txt")))); int len = 0; char[] c = new char[1024]; while ((len = br.read(c)) != -1) { bw.write(c, 0, len); bw.flush(); } bw.close(); br.close(); } }