1.StreamReader類讀取文件
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class Program
{
static void Main(string[]args)
{
try
{
FileStream aFile = new FileStream(@"c:\祝福.txt", FileMode.Open);
StreamReader sr = new StreamReader(aFile);
string strLine = sr.ReadLine();
while(strLine != null)
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
sr.Close();
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
return ;
}
Console.ReadKey();
}
}
FileStream構造函數找不到該文件,就會拋出異常。必須導入System.IO命名空間,才能訪問需要的類。
使用ReadLine()方法從文件中讀取文本。這個方法讀取回車符之前的文本,并以字符串的形式返回結果文本。當到達文件尾時,該方法就返回空值,通過這種方法可以測試文件是否已到達了尾部。注意使用while循環時,在執行循環體的代碼之前進行檢查,確保讀取的行不為空,這樣就只顯示文件的有效內容:
strLine = sr.ReadLine();
while(strLine != null)
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
ReadLine()方法不是在文件中訪問數據的惟一方法。StreamReader類還有許多讀取數據的方法。
讀取數據最簡單的方法是Read()。此方法將流的下一個字符作為正整數值返回,如果到達了流的結尾處,則返回–1。使用Convert實用類可以把這個值轉換為字符。在上面的示例中,程序的主體可以按如下方式編寫:
StreamReader sr = new StreamReader(aFile);
int nChar;
nChar = sr.Read();
while(nChar != -1)
{
Console.Write(Convert.ToChar(nChar));
nChar = sr.Read();
}
sr.Close();
對于小型文件,可以使用一個非常方便的方法,即ReadToEnd()方法。此方法讀取整個文件,并將其作為字符串返回。在此,前面的應用程序可以簡化為:
StreamReader sr = new StreamReader(aFile);
strLine = sr.ReadToEnd();
Console.WriteLine(strLine);
sr.Close();
這似乎非常容易和方便,但必須小心。將所有的數據讀取到字符串對象中,會迫使文件中的數據放到內存中。應根據數據文件的大小禁止這樣處理。如果數據文件非常大,最好將數據留在文件中,并使用StreamReader的方法訪問文件。
2.StreamWriter類寫入文件
一.創建StreamWrite對象
如果已經有了FileStream對象,則可以使用此對象來創建StreamWriter對象:
FileStream fs = new FileStream("test.txt",FileMode.CreateNew);
StreamWriter sw = new StreamWriter(fs);
也可以直接從文件中創建StreamWriter對象:
StreamWriter sw = new StreamWriter("test.txt",true);
此構造函數中有兩個參數,一個是文件名,另一個是布爾值。如果此值為false,則創建一個新文件,如果存在原文件,則覆蓋。如果此值為true,則打開文件保留原來數據,如果找不到文件,則創建新文件。
與創建FileStream對象不同,創建StreamWriter對象不會提供一組類似的選項:除了使用Boolean值添加到文件的末尾或創建新文件之 外,根本沒有像FileStream類那樣指定FileMode屬性的選項。而且,沒有設置FileAccess屬性的選項,因此總是有對文件的讀/寫權 限。為了使用高級參數,必須先在FileStream構造函數中指定這些參數,然后在FileStream對象中創建StreamWriter。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class Program
{
static void Main(string[]args)
{
try
{
FileStream aFile = new FileStream(@"c:\123\歡迎.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(aFile);
sw.WriteLine("為今后我們之間的進一步合作,");
sw.WriteLine("為我們之間日益增進的友誼,");
sw.Write("為朋友們的健康幸福,");
sw.Write("干杯!朋友!");
sw.Close();
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
return ;
}
}
}
編譯并運行該項目。如果沒有發現錯誤,則項目會很快運行,并關閉。因為我們在控制臺上沒有顯示任何內容,所以在控制臺中無法看到程序的執行情況。
這個簡單的應用程序演示了StreamWriter類的兩個最重要的方法:Write()和WriteLine()。這兩個方法具有許多重載的版本,可以完成更高級的文件輸出,但是本示例只使用基本的字符串輸出。
WriteLine()方法會寫入傳遞給它的字符串,其后跟有換行符。
Write()方法只是把傳送給它的字符串寫入文件,但不追加換行符,因此可以使用多個Write()語句寫入完整的句子或段落。