StreamReader和StreamWriter說明
StreamReader/StreamWriter操作的是字符數據(char),而FileStream操作的是字節數據(byte)
FileStream與StreamXXXX類的默認編碼都是UTF8,而一個中文字符占2個字符,所以StreamXXXX類常用於文本的打開與保存,而FileStream則用於數據的傳輸。
StreamReader sw = new StreamReader(Stream stream); StreamReader sw = new StreamReader(string path);
//為指定的流/文件名初始化 StreamReader 類的新實例,並且使用默認的編碼(UTF-8)讀取文件
StreamReader sw = new StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks); StreamReader sw = new StreamReader(string path, bool detectEncodingFromByteOrderMarks);
//用指定的字節順序(BOM)標記檢測選項,為指定的流/文件名初始化 StreamReader 類的一個新實例
StreamReader sw = new StreamReader(Stream stream, Encoding encoding); StreamReader sw = new StreamReader(string path, Encoding encoding);
//用指定的字符編碼為指定的流/文件名初始化 StreamReader 類的一個新實例,因為有些編碼(如GB2312、UTF7)就沒有BOM,就認不到編碼,就需要手動指定一個編碼。
StreamReader sw = new StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks); StreamReader sw = new StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks);
//為指定的流/文件名初始化 StreamReader 類的新實例,帶有指定的字符編碼和字節順序標記檢測選項。
StreamReader sw = new StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks, int bufferSize); StreamReader sw = new StreamReader(string path, bool detectEncodingFromByteOrderMarks, int bufferSize);
//為指定的流/文件名初始化 StreamReader 類的新實例,帶有指定的字符編碼、字節順序標記檢測選項和緩沖區大小。
1:public override int Read(); //讀取輸入流中的下一個字符並使該字符的位置提升一個字符,返回的是十進制字符
StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8); int Ichar = 0; //不再有可用的字符,則為 -1 例如讀取其中一個字符十進制是29992 則轉為ASCII字符是“用” while ((Ichar = sr.Read()) != -1) { Console.WriteLine(Ichar+"="+Convert.ToChar(Ichar).ToString());//將int類型轉成ASCII字符 }
結果如下
2:public override int Read(char[] buffer, int index, int count); //Read(字節數組,數組使用的開始位置,讀取字節的個數)
buffer是空存儲間,先把從index開始位置讀取count個的十進制字符復制到buffer,然後再讀取剩余的字符
StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8); char[] buffer = new char[512]; int readCount = sr.Read(buffer, 0, 512); for (int i = 0; i < readCount; i++) { Console.WriteLine(i+"="+buffer[i].ToString()); }
3:public override string ReadLine() //行讀入,返回值是字符串
StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8); string strLine = null; while ((strLine = sr.ReadLine()) != null) { Console.WriteLine(strLine); }
4:public override string ReadToEnd() //從開始位置讀取到末尾
5:public override int Peek() //讀取下一個字符
6:EndOfStream // 獲取一個值,該值表示當前的流位置是否在流的末尾
7:CurrentEncoding // 獲取當前 StreamReader 對象正在使用的當前字符編碼
StreamWriter sw = new StreamWriter(Stream stream); StreamWriter sw = new StreamWriter(string path);
StreamWriter sw = new StreamWriter(Stream stream,Encoding encoding); StreamWriter sw = new StreamWriter(Stream stream,Encoding encoding,int bufferSize);//用指定的編碼及緩沖區大小,為指定的流初始化 StreamWriter 類的新實例。int為緩沖區大小
StreamWriter sw = new StreamWriter(string path,bool append,Encoding encoding); StreamWriter sw = new StreamWriter(string path,bool append,Encoding encoding,int bufferSize);
//使用指定編碼和緩沖區大小,為指定路徑上的指定文件初始化 StreamWriter 類的新實例。true表示如果該文件存在,則可以向其追加。false表示將其全部重寫。如果該文 件不存在,則此構造函數將創建一個新文件。
StreamReader和StreamWriter說明