『黑馬程序員』---java--IO--字符流基礎

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

IO(Input Output)流

✔IO流用來處理設備之間的數據傳輸

✔Java對數據的操作是通過流的方式

✔Java用於操作流的對象都在IO包中

✔流按操作數據分爲兩種:字節流與字符流

✔流按流向分爲:輸入流,輸出流

字符流:裏面包含解碼錶(GBK,Unicode,ascii)主要操作字符文字.可以指定編碼表進行操作


IO流主要就是,圍繞讀寫展開的

字節流兩個基類:

InputStream OutputStream

 

字符流兩個基類:

Reader Writer


字符流的特點.

既然IO流用於操作數據的,那麼數據的最常見體現形式就是:文件

首先,在硬盤上,創建一個文件並寫入一些文字數據玩玩.

找到一個專門操作文件的Writer子類對象,FileWriter,

後綴名是父類名,前綴名是該流對象的功能.


import java.io.*;
class FileWriterDemo
{
	public static void main(String[] args)throws IOException
	{
		/*到複製*****
		//創建並寫入數據
		//創建一個FileWriter對象,該對象一被初始化就必須要明確被操作的文件
		//而且該文件會被創建到制定的目錄下.如果該目錄下已有同名文件,將被覆蓋
		//該步就是在明確數據要存放的目的地.
		
		FileWriter fw=null;
		
		try
		{
			//只要一 new就是一個新對象和一個新文件,想要續寫的話就傳遞一個true參數.
			fw=new FileWriter("demo.txt",true);
			//調用write();方法,將字符長寫入到流中.注意這裏win下回車是\r
			fw.write("你好\r\n謝謝");
		//flush()刷新緩衝數據,將數據刷到目的地flush[沖洗]
			fw.flush();
		
		}
		catch(IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
		//關閉流資源,關閉之前會刷新一次內部的緩衝數據,將數據刷到目的地中,最終都要關閉該流
		try
		{
			//進行判斷,避免空指針異常.萬一,new FileWriter沒常見成功.
			if(fw!=null)//****
			fw.close();
		}
		catch(IOException e)
		{
			System.out.println(e.toString());
		}
		
			
		}
		
		//讀取數據***********************
		//創建一個文件讀取流對象,和指定名稱的文件相關聯.
		//要保證該文件是已經存在的,如果不存在,會發生異常.FileNotFoundException
		FileReader fr=new FileReader("demo.txt");
		
		
		//*****第一種,,調用讀取流的read()方法,特性,自動往下讀數據,到末尾會返回-1標識;
		while(true)第一種循環讀取
		{
			int ch=fr.read();
			if(ch==-1)
				break;
			System.out.print((char)ch);
		}
		//第二種循環讀取,,,頂...
		int ch=0;
		while((ch=fr.read())!=-1){
			System.out.print((char)ch);
		}

read讀到結尾返回-1原理圖示例



//******第二種方式:通過字符數組進行讀取read(char[])*****
		
		//定義一個字符數組,用於存儲讀到的字符
		//該read(char[])返回的是讀到字符個數,,,,讀一個存一個,最後讀完再輸出
		char[] ch=new char[1024];//一般定義1024的整數倍
		int num=0;
		while((num=fr.read(ch))!=-1){
			System.out.print(new String(ch,0,num));
		}
		*/
		
		
		//******************複製
		//實際上就是,不斷的讀取
		//新建一個文件來接收,,要複製的數據.就是,複製後的文件
		FileWriter fw=new FileWriter("copy.txt");
		//制定要複製的文件
		FileReader fr=new FileReader("StringTest.txt");
		
		//第一種,,,循環讀取.
		int num=0;
		/*while((num=fr.read())!=-1){//效率低,頻繁讀寫
			fw.write((char)num);
		}*/
		
		
		//第二種先對來說,以下方式比較高效,讀完1024寫一次.
		char[] ch=new char[1024];
		while((num=fr.read(ch))!=-1){
					fw.write(ch,0,num);
		}

		
		//記着關掉流,有多少關多少..
		
		fw.close();
		fr.close();
	
	}
}

複製原理圖示:



發佈了30 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章