打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
笔记9:vb.net的字符数据流TextReader、TextWriter

        在学习字符数据流之前,看一个例子,在定义时不同的构造构造方法会出现不同的结果:

  1. Imports System.IO  
  2. Imports System.Text  
  3. Public Class Form1  
  4.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  5.         Dim sr As New StreamReader("D:\11.txt")  
  6.         'Dim sr As New StreamReader("D:\11.txt", Encoding.Default)  
  7.         TextBox1.Text = sr.ReadToEnd  
  8.         sr.Close()  
  9.     End Sub  
  10. End Class  
                     

                  原因是编码的不同,最后显示的汉字有可能是乱码。这提醒我们在汉字的I/O时要注意编码。

.






                正题 :字符数据流的结构:

              


              TextReader与TextWriter类是抽象类,其基本方法与Stream类相似。

               它们的主要区别在于:TextReader与TextWriter通过特定字符集编码方式转换成字节数据,完成字符数据的存取。



一、TextReader与TextWriter类

         读写文本数据的基类是TextReader与TextWriter类。

         这两个抽象类定义了从数据流或文本字符串中读写的基本功能,如Read、Peek等,与Stream类类似,差异是读取的是

                      字符串,而不是字节。

          

         TextReader的方法有:Read、ReadLine、ReadToEnd

          TextWriter的方法有:Writer、WriterLine

          比如:

  1. '===========TextReader=========================  
  2. '读取文本读取器中的下一个字符并使该字符的位置提升一个字符  
  3. Public Overridable Function Read() As Integer  
  4.   
  5.     '从当前读取器中读取指定数目的字符并从指定索引开始将该数据写入缓冲区  
  6. Public Overridable Function Read(<OutAttribute> buffer As Char(), index As Integer, count As Integer) As Integer  
  7.   
  8.     '从文本读取器中读取一行字符并将数据作为字符串返回  
  9. Public Overridable Function ReadLine() As String  
  10.   
  11.     '读取从当前位置到文本读取器末尾的所有字符并将它们作为一个字符串返回  
  12. Public Overridable Function ReadToEnd() As String  
  13.   
  14.   
  15.     '======TextWriter============================  
  16.     '将字符写入该文本字符串或流。  
  17. Public Overridable Sub Write(value As Char)  
  18. Public Overridable Sub Write(buffer As Char())  
  19. Public Overridable Sub Write(value As Integer)  
  20.   
  21.     '将行结束符的字符串写入文本字符串或流  
  22. Public Overridable Sub WriteLine()  
  23. Public Overridable Sub WriteLine(value As Char)  
  24.   
  25.   
  26.     '将后跟行结束符的字符子数组写入文本字符串或流  
  27. Public Overridable Sub WriteLine(buffer As Char(), index As Integer, count As Integer)  



二、创建StreamReader对象

       TextReader派生出StreamReader类,StreamReader从派生于Stream类的子类中读取数据。


        StreamReader构造有根据基础流Stream来构造、根据文件名来构造:

  1. '为指定的流初始化 StreamReader 类的新实例  
  2. Public Sub New(stream As Stream)  
  3.   
  4.     '为指定的文件名初始化 StreamReader 类的新实例。  
  5. Public Sub New(path As String)  
  6.   
  7.   
  8.   
  9.   
  10.     '带编码方式的上面两类  
  11. Public Sub New(stream As Stream, encoding As Encoding)  
  12. Public Sub New(path As String, encoding As Encoding)  
         注意:StreamReader本身不能取得流的长度,只能由基类的流来取得(微软翻译为基础流):

                                 StreamReader.BaseStream.Length

                     对于汉字情况,请选择Encoding.Default试试



三、StreamReader属性

                BaseStream      返回基础流。
        CurrentEncoding      获取当前 StreamReader 对象正在使用的当前字符编码。
        EndOfStream         获取一个值,该值表示当前的流位置是否在流的末尾。(True/False)




四、StreamReader常用方法

          读取文本文件中最常见的是:    ReadLine、ReadToEnd、Peek、Read。

  1. '返回下一个可用的字符,但不移动流位置(常用于探测下一字符或是否结束)  
  2. Public Overrides Function Peek As Integer   
  3.   
  4.   
  5. '读取输入流中的下一个字符并使该字符的位置提升一个字符。  
  6. Public Overrides Function Read As Integer  
  7.   
  8. '从当前流中将指定的最多个字符读到指定索引位置开始的缓冲区  
  9. Public Overrides Function Read (buffer As Char(),index As Integer, count As Integer ) As Integer  
  10.   
  11.   
  12. Public Overrides Function ReadLine As String  
  13. Public Overrides Function ReadToEnd As String  



五、StreamWriter类

        StreamWriter与StreamReader对应。创建对象时一样:由流或文件名来创建


        1、构造:

          StreamWriter(Stream)
                                                 用 UTF-8 编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的一个新实例。


          StreamWriter(String)
                                                用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。


          StreamWriter(Stream, Encoding)
                                                用指定的编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。


           StreamWriter(String, Boolean)
                                                用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。 如果该文件存在,

                                                 则可以将其覆盖或向其追加。 如果该文件不存在,则此构造函数将创建一个新文件。




          2、写入方法

                主要有两个:Write、 WriterLine

                 还有一个隐形的Flush,清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。

                 具体如:

                 Public Sub  Writer(ByVal  buffer()  as Char)

                 Public Sub  Writer(byVal   buffer() as Char,ByVal  index As Integer,Byval count  As Integer)

                 Public Sub  Writer(ByVal   value As String)

             



六、StringReader与StringWriter

        它是以字符串为数据源,前面的是以Stream为数据源。


        所以构造方法是以字串:

                Public  Sub  New(ByVal  s As String)

                Public  Sub  New (ByVal  sb as StringBuilder)



        同前面的StreamReader、StreamWriter一样,


        StringReader的方法有:Peek、Read、ReadLine、ReadToEnd


        StringWriter的方法有:Writer、WriterLine

                    唯一不同的,取是基础流的是用:GeStringBuilder   它返回数据源(前面是用BaseStream)

                     


以一个例子结束吧:

  1. Imports System.IO  
  2. Public Class Form1  
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim sr As New StreamReader("D:\11.txt")  
  5.         Dim e1() As String  
  6.         Dim e2() As String  
  7.   
  8.         Do Until sr.EndOfStream  
  9.             If sr.ReadLine = "EA" Then Exit Do  
  10.         Loop  
  11.   
  12.         e1 = Split(sr.ReadLine)  
  13.         e2 = Split(sr.ReadLine)  
  14.   
  15.         For i As Int32 = 0 To UBound(e2)  
  16.             ListBox1.Items.Add(CInt(e2(i)))  
  17.         Next  
  18.   
  19.         sr.Close()  
  20.     End Sub  
  21. End Class  


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 流总结
如何掌握强大的VB.NET ReadLine()方法
c#文件读写相关类介绍
C#读取和写入文本文件
c#文件操作
vb.net读写文件代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服