一.文件流(字節流,字符流)
1.字節流
package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; try{ in = new FileInputStream("e:\\go\\file.txt"); } catch(FileNotFoundException e) { System.out.println("找不到指定的文件"); System.exit(-1); } try{ long num = 0; // 返回-1的話就表示已經讀到了文件的結尾 while((b = in.read()) != -1) { System.out.print((char)b); num++; } in.close(); System.out.println("\n\n共讀取了" + num + "個字節"); } catch(IOException e1) { System.out.println("讀取文件時出現異常"); System.exit(-1); } } }
package com.zijie; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("e:\\go\\file.txt"); // OutputStream有這個文件就往這個文件里面寫, 沒有的話就自動創建一個 out = new FileOutputStream("e:\\go\\fileNew.txt"); // 一邊讀, 一邊寫 while ((b = in.read()) != -1) { out.write(b); } } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); System.exit(-1); } catch (IOException e) { System.out.println("文件復制出錯"); System.exit(-1); } System.out.println("文件成功復制"); } }
2.字符流
package com.zifu; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TestFileReader { public static void main(String[] args) { FileReader fr = null; int c = 0; try { fr = new FileReader("e:\\go\\file.txt"); while ((c = fr.read()) != -1) { System.out.print((char) c); } fr.close(); } catch (FileNotFoundException e) { System.out.println("文件未找到"); System.exit(-1); } catch (IOException e) { System.out.println("讀取文件時出現異常"); System.exit(-1); } } }
package com.zifu; import java.io.FileWriter; import java.io.IOException; public class TestFileWriter { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("e:\\go\\unicode000.dat"); for (int i = 1; i <= 50000; i++) { fw.write(i); } } catch (IOException e) { System.out.println("寫入文件出錯 !"); System.exit(-1); } } }
二.緩沖流
IO的緩沖區的存在就是為了提高效率,把要操作的數據放進緩沖區,然后一次性把緩沖區的內容寫到目的地,而不是寫一次就往目的地寫一次.
在這里要注意的是當我們關閉了緩沖區對象實際也關閉了與緩沖區關聯的流對象.
package com.buffer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestBufferRW { public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\go\\bwrite.txt")); BufferedReader br = new BufferedReader(new FileReader("e:\\go\\bwrite.txt")); String s = null; for (int i = 0; i < 100; i++) { s = "" + Math.random(); //bw.write(s); bw.append(s); bw.newLine(); } bw.flush(); // 特別好用的方法, readLine while((s = br.readLine()) != null) { System.out.println(s); } br.close(); bw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package com.buffer; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestBufferStream { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("e:\\go\\bufferedfile.txt"); BufferedInputStream bis = new BufferedInputStream(fis); int c = 0; System.out.println((char)bis.read()); System.out.println((char)bis.read()); /* while((c = bis.read()) != -1) { System.out.print((char)c+", "); }*/ // 標記到第30的位置再開始讀數據 bis.mark(100); for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char)c); } System.out.println(); // 回到mark標記的那個地方 bis.reset(); for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char)c); } bis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
三.轉換流
轉換流是指將字節流與字符流之間的轉換,包含兩個類:InputStreamReader和OutputStreamWriter。
轉換流的出現方便了對文件的讀寫,她在字符流與字節流之間架起了一座橋梁,使原本毫無關聯的兩種流操作能夠進行轉化,提高了程序的靈活性。
package com.convert; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; public class TestTranForm1 { public static void main(String[] args) { OutputStreamWriter osw = null; try { osw = new OutputStreamWriter(new FileOutputStream("e:\\go\\newreader.txt")); osw.write("山東淄博"); // 默認使用當前系統的字符編碼 System.out.println(osw.getEncoding()); osw.close(); // FileOutputStream加第二個參數true表示追加內容 osw = new OutputStreamWriter(new FileOutputStream("e:\\go\\newreader.txt", true), "utf-8"); osw.write("qwerttttt"); System.out.println(osw.getEncoding()); osw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }