----------- 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();
}
}
複製原理圖示: