//=================================================
1. IO流的概述
?IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸.流按操作數(shù)據(jù)分為兩種:字節(jié)流與字符流
?字符流:用于專門處理字符文件數(shù)據(jù)(文本文件,記事本可以打開觀看到了)
? ? ?操作字符的,計算機的存儲中,兩個字節(jié),表示一個字符
? ? ?漢字兩個字節(jié)表示,因此使用字符流操作文本文件,方便簡單
? ? ?這個字符流使用的時候,默認的去查詢本機默認編碼表 GBK
?字節(jié)流:每次做操作一個字節(jié),8個二進制為
? 這個流對象,可以操作任意類型文件
? 計算機的遠程操作過程中,用的都是字節(jié)流
? 不查詢編碼表
?IO流技術(shù),不能操作文件夾。?只能操作文件
?
//=================================================
2. IO流分類
? 按照流向分,輸出流Output,輸入流Input
? 向硬盤中寫一個文件,輸出流,文件數(shù)據(jù)目的
? 讀取硬盤中的一個文件,輸入流,文件數(shù)據(jù)源
? 按照操作文件類型分,字符流
-- 文本,字節(jié)流 -- 任意文件
? 字符流:
? ? 字符輸出流:抽象基類:Writer -- 方法,寫的方法 write
? ? 字符輸入流: 抽象基類:Reader -- 方法,讀的方法 read
? 字節(jié)流:
? ? 字節(jié)輸出流:抽象基類:OutputStream -- 方法,寫的方法 write
? ? 字節(jié)輸入流:抽象基類:InputStream -- 方法,讀的方法 read
//=================================================
3. 字符輸出流對象
? java.io.Wirter?類的方法,寫的方法,方法都是重載形式?
? 寫,字符數(shù)組,字符數(shù)組一部分,單個字符,寫字符串,字符串一部分
? 找到子類FileWriter 構(gòu)造方法
? FileWriter(String fileName) 傳遞一個文件名
? 字符流輸出數(shù)據(jù),寫文件,必須刷新,否則數(shù)據(jù)不會走到目的地
? 但是只要你執(zhí)行的刷新,數(shù)據(jù)必走向目的地
? close()方法,關(guān)閉流對象,關(guān)閉之前,刷新內(nèi)存中數(shù)據(jù)
/*
? FileWriter字符輸出流,寫一個文本文件
*/
import java.io.*;
class FileWriterDemo
{
?public static void main(String[] args) throws IOException
?{
? //創(chuàng)建FileWriter的對象,傳遞字符串的文件名
? /*
? ? ? ?構(gòu)造方法,拋出了IO異常
? ? 堆中創(chuàng)建一個對象
? ? 創(chuàng)建了一個文件,如果文件已經(jīng)存在,直接覆蓋
? ? IO流對象本身,沒有創(chuàng)建文件的功能,調(diào)用Windows中的功能創(chuàng)建的
? */
? FileWriter fw = new FileWriter("c:\demo.txt");
? //開始寫文件了,將abc寫到文件中,write
? fw.write("abc");//數(shù)據(jù)寫在了內(nèi)存中
?
? //volid flush()刷新該流的緩沖,將內(nèi)存中的數(shù)據(jù),刷到目的中去
? ? ? ? fw.flush();
? fw.write("哈哈");
? fw.flush();
? //使用完IO流后,釋放Windows資源,關(guān)閉流對象
? ? ? ? fw.close();
?}
}
//=============
/*
? FileWriter類的寫的其他方法
*/
import java.io.*;
class FileWriterDemo1
{
?public static void main(String[] args) throws IOException
?{
? FileWriter fw = new FileWriter("e:\other.txt");
? //寫一個字符數(shù)組
? char[] ch = {'你','我','哈'};
? fw.write(ch,0,ch.length);
? fw.flush();
? //寫一個單個的字符
? fw.write(65);
? fw.flush();
? fw.close();
?}
}
//=================================================
4. 字符輸入流對象
? java.io.Reader?類的方法,讀的方法,方法都是重載形式
? ?讀,讀取單個字符,讀取字符數(shù)組,讀取字符數(shù)組一部分
? ?找子類FileReader構(gòu)造方法FileReader(String
fileName) 傳遞字符串的文件名
? ?讀取的方法?int
read() 讀取單個字符,返回int值
? ?讀取一個字符,返回ASCII碼值,read()方法,執(zhí)行一次,自動向后讀一個
???read()方法,讀取到文件結(jié)尾返回-1
? ? int read(char[] ch)讀取方法的時候,傳遞一個字符數(shù)組
? ? 字符數(shù)組,緩沖區(qū)
? ? 數(shù)組,read()讀取到的字符,裝在數(shù)組中
? ? int返回值,什么意思?讀取到的有效的字符個數(shù)
? ? 數(shù)組緩沖,讀取效率跟高,推薦使用數(shù)組緩沖讀取文本文件
/*
?* 使用字符輸入流FileReader讀取一個文件
?* 必須是文本文件
?*/
import java.io.*;
public class FileReaderDemo {
?public static void main(String[] args) throws IOException{
? long start = System.currentTimeMillis();
? //創(chuàng)建一個字符輸入流對象,傳遞文件名
? FileReader fr = new FileReader("e:\1.txt");
? //調(diào)用讀取的方法
? //使用循環(huán)讀取,read()結(jié)束返回-1,用-1作為循環(huán)條件進行讀取了
? int len = 0 ;
? while( (len = fr.read())!=-1 ){
? ?System.out.print((char)len);
? }
?
? fr.close();
? long end = System.currentTimeMillis();
? System.out.println(end - start );
?}
}