公司使命:打造嘉兴技术实力最强的网络公司
服务项目:嘉兴网站建设 嘉兴网站制作 嘉兴网站优化
新闻中心

文件读写类StreamRead和SteamWrite

发布时间:2009/10/11 12:56:16   文章来源:jiaxingweb   浏览:[  ]   评论:[  ]

        我在在网站建设的时候,现在都用到页面静态化,页面静态化的意思就是说将网站数据库中的内容通过文件的生成方式生产html页面,当然里面还要接触到css页面布局和排版的内容,我们这里简要讲解一下静态化,在asp.net技术的实现中,我们用到StreamRead和StreamWrite两个类来对文件进行读出和写入,StreamRead读出文件就是读出模板文件,在程序中对适当的模块进行替换后,再使用StramWrite类将替换后的文件写出空白文件中,这样就是一个简单动态页面静态化的过程,下面重点介绍一下StreamRead类和StreamWeite类。


        这些类执行的方法可以一次读写一行文本(StreamReader.ReadLine() 和 StreamWriter.WriteLine())。在读取文件时,流会自动确定下一个回车符的位置,并在该处停止读取。在写入文件时,流会自动把回车符和换行符添加到文本的末尾。
        使用StreamReader 和 StreamWriter类,就不需要担心文件中使用的编码方式(文本格式)了。可能的编码方式是ASCII(一个字节表示一个字符)或者基于Unicode的格式,UNICODE、UTF7和 UTF8。Windows 9x系统上的文本文件总是ASCII格式,因为Windows 9x系统不支持Unicode,但Windows NT、2000、XP和2003都支持Unicode,所以文本文件除了包含ASCII数据之外,理论上可以包含Unicode、UTF7或 UTF8数据。其约定是:如果文件是ASCII格式,就只包含文本。如果是Unicode格式,就用文件的前两个或三个字节来表示,这几个字节可以设置为表示文件中格式的值的特定组合。
        这些字节称为字节码标记。在使用标准Windows应用程序打开一个文件时,例如Notepad 或 WordPad,不需要考虑这个问题,因为这些应用程序都支持不同的编码方法,会自动正确地读取文件。StreamReader类也是这样,它可以正确读取任何格式的文件,而StreamWriter类可以使用任何一种编码技术格式化它要写入的文本。

1. StreamReader类
        StreamReader用于读取文本文件。用某些方式构造一个StreamReader要比构造一个FileStream实例更简单,因为使用StreamReader时不需要FileStream的一些选项。特别是不需要模式和访问类型,因为StreamReader只能执行读取操作。除此以外,没有指定共享许可的直接选项,但StreamReader有两个新选项:

        ●需要指定不同的编码方法所执行的不同操作。可以构造一个StreamReader 检查文件开头的字节码标记,确定编码方法,或者告诉StreamReader该文件使用某个编码方法。
        ●不提供要读取的文件名,而为另一个流提供引用。

        最后一个选项需要解释一下,因为它涉及到把读写数据的模型建立在流概念上的另一个优点。StreamReader工作在相对比较高的级别上,如果有另一个流在读取其他源的数据,就要使用由StreamReader提供的工具来处理这个流,因为这个流包含文本,此时StreamReader就非常有用了。可以把这个流的输出传送到StreamReader上,这样,StreamReader就可以读取和处理任何数据源(不仅仅是文件)中的数据了。
        前面在讨论BinaryReader类时也讨论了这种情况。但在本书中,只使用StreamReader来直接连接文件。
其结果是StreamReader有非常多的构造函数。而且,还有两个返回StreamReader引用的FileInfo方法:OpenText() 和 CreateText()。下面仅说明其中一些构造函数。

        最简单的构造函数只带一个文件名参数。StreamReader会检查字节码标记,确定编码方法:
StreamReader sr = new StreamReader(@"C:"My Documents"ReadMe.txt");
        另外,如果指定UTF8编码方法:
StreamReader sr = new StreamReader(@"C:"My Documents"ReadMe.txt",
  Encoding.UTF8);

使用类System.Text.Encoding上的几个属性之一,就可以指定编码方法。这个类是一个抽象基类,可以根据这个类定义许多类,其方法可执行实际的文本编码。每个属性都返回相应类的一个实例,可以使用的属性包括:
        ●ASCII
        ●Unicode
        ●UTF7
        ●UTF8
        ●BigEndianUnicode 

        下面的示例解释了如何把StreamReader关联到FileStream上。其优点是可以显式指定是否创建文件和共享许可,如果直接把StreamReader关联到文件上,就不能这么做:
FileStream fs = new FileStream(@"C:"My Documents"ReadMe.txt",
FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader sr = new StreamReader(fs);
对于本例,指定StreamReader查找字节码标记,以确定使用了什么编码方法,以后的示例也是这样,从一个FileInfo实例中获得StreamReader:
FileInfo myFile = new FileInfo(@"C:"My Documents"ReadMe.txt");
StreamReader sr = myFile.OpenText();
与FileStream一样,应在使用后关闭StreamReader。如果没有这样做,就会致使文件一直锁定,因此不能执行其他过程(除非使用FileStream构造StreamReader和特定的FileShare. ShareReadWrite):
sr.Close();
介绍完实例化StreamReader后,就可以用该实例作一些工作了。与FileStream一样,我们仅指出可以用于读取数据的许多方式,您应在SDK文档说明书中查阅其他不太常用的StreamReader方法。
所使用的最简单的方式是ReadLine(),该方法一次读取一行,但返回的字符串中不包括标记该行结束的回车换行符:
string nextLine = sr.ReadLine();
另外,还可以在一个字符串中提取文件的所有剩余内容(严格地说,是流的全部剩余内容):
string restOfStream = sr.ReadToEnd();
可以只读取一个字符:
int nextChar = sr.Read();
Read()的重载方法可以把返回的字符转换为一个整数,如果到达流的尾端,就返回-1。
最后,可以用一个偏移值,把给定个数的字符读到数组中:
// to read 100 characters in.
int nChars = 100;
char [] charArray = new char[nChars];
int nCharsRead = sr.Read(charArray, 0, nChars);
如果要求读取的字符数多于文件中剩余的字符数,nCharsRead应小于nChars 。


2. StreamWriter类
        StreamWriter类的工作方式与StreamReader的类似,但StreamWriter只能用于写入文件(或另一个流)。构造StreamWriter的方法包括:
StreamWriter sw = new StreamWriter(@"C:"My Documents"ReadMe.txt");
上面的代码使用了UTF8编码方法,.NET把这种编码方法设置为默认的编码方法。如果要指定其他的编码方法:
StreamWriter sw = new StreamWriter(@"C:"My Documents"ReadMe.txt", true,
  Encoding.ASCII);
        在这个构造函数中,第二个参数是Boolean型,表示文件是否应以追加方式打开。构造函数的参数不能仅是一个文件名和一个编码类。
当然,可以把StreamWriter关联到一个文件流上,以获得打开文件的更多控制选项:
FileStream fs = new FileStream(@"C:"My Documents"ReadMe.txt",
  FileMode.CreateNew, FileAccess.Write, FileShare.Read);
StreamWriter sw = new StreamWriter(fs); 

        FileInfo不执行返回StreamWriter的任何方法。 
        另外,如果要创建一个新文件,并开始给它写入数据,可以使用下面的代码:
FileInfo myFile = new FileInfo(@"C:"My Documents"NewFile.txt");
StreamWriter sw = myFile.CreateText();

        与其他流类一样,在使用完后,要关闭StreamWriter:
sw.Close();
写入流可以使用StreamWriter.Write()的4个重载方法来完成。最简单的方式是写入一个流,后面加上一个回车换行符:
string nextLine = "Groovy Line";
sw.Write(nextLine);
也可以写入一个字符:
char nextChar = ~a~;
sw.Write(nextChar);
也可以写入一个字符数组:
char [] charArray = new char[100];
// initialize these characters
sw.Write(charArray);
甚至可以写入字符数组的一部分:
int nCharsToWrite = 50;
int startAtLocation = 25;
char [] charArray = new char[100];
// initialize these characters
sw.Write(charArray, startAtLocation, nCharsToWrite);

评论
发表评论
评论内容:
昵称:
邮箱:
嘉兴网络公司 嘉兴网站建设 嘉兴网站制作 嘉兴建网站 嘉兴做网站 嘉兴网页制作 PE给水管 HDPE中空壁缠绕管 ABS管生产厂家
服务热线: 0573-82102225 15858312461 QQ: 56373131 E-mail: sales@jiaxingweb.com 地址: 嘉兴市南湖区富润路101号320室 浙ICP备09050985号
嘉兴网站建设-嘉兴网站制作-嘉兴网站优化-龙媒网络@嘉兴网络公司 www.jiaxingweb.com