標籤:java io流
IO流常用基類:
位元組流常用基類:
InputStream,OutputStream
字元流常用基類:
Reader Writer
轉換流:
InputStreamReader:位元組流通向字元流的橋樑 用於操作位元組流的字元流對象
OutputStreamWriter:字元流通向位元組流的橋樑 用於操作字元流的位元組流對象
由這四個類派生出來的子類名稱都是以其父類名作為子類名的尾碼
字元流Reader&Writer的使用方法:
1.建立:
以FileReader FileWriter為例
建立FileReader對象:
FileRead fr = new FileReader ("demo.txt");
建立FileWriter對象:
FileWriter fw = new FileWriter ("demo.txt");
該檔案會自動建立到指定的檔案夾下,若是有同名檔案,將會把原來的覆蓋。
建立時會發生異常,需進行異常的處理。
2.讀取/寫入:
fr.read() 結束標誌:返回值為-1
一次讀一個,自動往下讀
可以這麼做:
int len = 0;while ((len = fr.read()) != -1){System.out.println (len);//列印出結果是數字,可強制轉換}
一次讀一個數組,自動往下讀
可以這麼做:
char buf[] = new char[1024];int num = 0;while ((num = fr.read(buf)) != -1){System.out.println (new String (buf));}
寫入就簡單很多了
fw.write("shdsdhksldlksjdlksjdkl");fw.flush ();//重新整理,將內容刷進目的地
3.關閉字元流對象:
fr.close ();fw.close ();
關閉之前一定要先判斷該對象是否被建立了。
4.異常的處理:
以FileWriter為例,FileReader也是一樣的。
FileWriter fw = null;try {fw = new FileWriter("demo.txt");fw.write("sssssssssssssssssss");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (fw != null) {fw.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
5.使用緩衝區提高效率:
緩衝區的出現時為了提高流的讀取效率,所以在建立緩衝區之前必須要有流對象.
建立:
將需要提高效率的流對象作為參數傳遞給緩衝區的建構函式。
BufferedReader bufr = new BufferedReader (new FileReader ("demo.txt"));BufferedWriter bufw = new BufferedWriter (new FilrWriter ("demo.txt"));
寫入/讀取
讀取:
緩衝區新提供了一個高效的方法readLine ()一次讀一行
String line = bufr.readLine ();System.out.println (line);
寫入:
bufw.write ("dsadsadsadsadsafrfg");bufw.flush ();
關閉緩衝區:
關閉緩衝區之後就不必再關閉字元流對象了
bufr.close();bufw.close ();
位元組流 的使用方法:
1.建立:
FileOutputStream fos = new FileOutputStream ("demo.txt");
會自動建立,若有同名檔案將會覆蓋。
FileInputStream fis = new FileInputStream ("demo.txt");
2.讀取/寫入
寫入:
fos.write ("dsadsadsadwerfetrythy");fow.flush ();
讀取:
一次讀一個
int len = 0;while ((len = fis.read ()) != -1){System.out.println ((char)ch);}
一次讀一數組:
byte buf[] = new byte [1024];int len = 0;while ((len = fis.read (buf)) != -1){System.out.println (new String (buf,0,len));}
byte buf[] = new byte[fis.available()];//估計位元組數int len = 0;while ((len = fis.read (buf)) != -1){System.out.println (new String (buf,0,len));}
4.緩衝區
將需要被提高效率的位元組流對象作為參數傳遞給緩衝區的建構函式.
BufferedOutputStream bufos = new BufferedOutputStream (new FileOutputStream ("demo.txt"));BufferedInputStream bufis = new BufferedInputStream (new FileInputStream("demo.txt"));
5.關閉
有緩衝區的時候,只需要關閉緩衝區就好,沒有的話調用close方法關閉流對象。
轉換流:
InputStreamReader:位元組流通向字元流的橋樑 用於操作位元組流的字元流對象
OutputStreamWriter:字元流通向位元組流的橋樑 用於操作字元流的位元組流對象
1.建立:
將位元組流轉換為字元流對象,使用轉換流
FileInputStream fis = new FileInputStream ("demo.txt");InputStreamReader isr = new InputStreamReader (fis);兩句寫成一句InputStreamReader isr = new InputStreamReader (new FileInputStream ("demo.txt"));
FileOutputStream fis = new FIleOutputStream ("demo.txt");OutputStreamWriter osw = new OutputStreamWriter (fis);兩句寫成一句OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream ("demo.txt"));
2.寫入/讀取
寫入:
osw.write ("sgydgasddsagukwe");
讀取:
int len = 0;while ((len = isr.read()) != -1) {System.out.print((char)len);}
3.緩衝區
FileInputStream fis = new FileInputStream ("demo.txt");InputStreamReader isr = new InputStreamReader (fis);BufferedReader bufr = new BufferedReader (isr);三句成一句:BufferedReader bufr = new BufferedReader (new InputStreamReader (new FileInputStream ("demo.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("demo.txt")));
Java---30---IO(一)