JAVA基礎IO流
阿新 • • 發佈:2018-12-18
InputStream / Reader :所有輸入流的基類,前者是位元組輸入流,後者是字元輸入流。
輸入流:只能從中讀取資料,而不能向其寫入資料。
OutputStream / Writer :所有輸出流的基類,前者是位元組輸出流,後者是字元輸出流。
輸出流:只能向其寫入資料,而不能從中讀取資料。
此處的輸入、輸出是以程式執行所在記憶體的角度劃分的。
如果從硬碟的角度來考慮,二者應該反過來才對。
但是當我們從檔案中讀取資料時是將資料從硬碟移動到記憶體,對記憶體來說是一個輸入的過程。
反之,當我們將資料寫入檔案時對記憶體來說需要把資料從自身移動到硬碟,是一個輸出的過程。
以字元的形式向檔案新增資料,讀取資料
package com.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.util.ArrayList; import java.util.List; public class Test02 { public static void main(String[] args) throws IOException { File file = new File("text.txt"); //true可有可無,代表是向檔案追加內容,false或不寫會清空檔案原有內容 FileWriter fw = new FileWriter(file, true); BufferedWriter bw = new BufferedWriter(fw); bw.write("新增"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); List<String> list = new ArrayList<String>(); String str; while((str = br.readLine())!=null) { list.add(str); } for(int i=0 ; i<list.size() ; i++) { System.out.println(list.get(i)); } bw.close(); } }
以位元組方式向檔案寫入資料,讀取資料
package com.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; public class Test03 { public static void main(String[] args) throws IOException{ File file = new File("text01.txt"); FileOutputStream out = new FileOutputStream(file,true); BufferedOutputStream bos = new BufferedOutputStream(out); byte[] a = "新增".getBytes(); //位元組流直接操作的位元組,所以寫出中文必須將字串轉換成位元組陣列 bos.write(a);//以位元組陣列的方式向檔案新增內容 bos.close(); FileInputStream in = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(in); InputStreamReader isr = new InputStreamReader(bis, "utf-8"); /* * 此方法無法讀取中文 * int n = -1; while((n = bis.read())!=-1) { System.out.print((char)n); } System.out.println("--");*/ byte[] b = new byte[100]; int m = -1; while((m = in.read(b))!=-1) { //可以讀取中文 System.out.print(new String(b,0,m)); } } }