C# 第七章『I/O数据流』◆第5节:数据流—StreamWriter类、StreamReader类

        FileStream类的对象只能以字节的形式读取/写入数据,这就使操作变得非常困难,所以需要借用StreamWriter对象或StreamReader对象的方法来处理文件。

        一、StreamWriter 类

StreamWriter 类https://docs.microsoft.com/zh-cn/dotnet/api/system.io.streamwriter?view=netframework-4.0

         1、定义
        实现一个 TextWriter,使其以一种特定的编码向流中写入字符。专门用来处理文本文件的类,可以方便地向文本文件中写入字符串,同时它也负责重要的转换和处理项FileStream对象写入的工作。

  • 命名空间:System.IO
  • 程序集:mscorlib.dll
  • 继承:Object→MarshalByRefObject→TextWriter→StreamWriter
  • 属性:SerializableAttribute,ComVisibleAttribute
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class StreamWriter : System.IO.TextWriter

        2、StreamWriter 类的构造函数

StreamWriter(Stream)  使用 UTF-8 编码及默认的缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。
StreamWriter(Stream, Encoding)  使用指定的编码及默认的缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。
StreamWriter(Stream, Encoding, Int32)  使用指定的编码及缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。
StreamWriter(String)  用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。
StreamWriter(String, Boolean)  用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。
StreamWriter(String, Boolean, Encoding)  使用指定的编码和默认的缓冲区大小,为指定的文件初始化 StreamWriter 类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。
StreamWriter(String, Boolean, Encoding, Int32)  使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter 类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。

        3、StreamWriter 类的字段

CoreNewLine  存储用于此 TextWriter 的换行符。(继承自 TextWriter)
Null  提供 StreamWriter,它不带任何可写入但无法从中读取的后备存储。

        4、StreamWriter 类的属性

AutoFlush  获取或设置一个值,该值指示 StreamWriter 在每次调用 Write(Char) 之后是否都将其缓冲区刷新到基础流。
BaseStream  获取同后备存储连接的基础流。
Encoding  获取在其中写入输出的 Encoding。
FormatProvider  获取控制格式设置的对象。(继承自 TextWriter)
NewLine  获取或设置由当前 TextWriter 使用的行结束符字符串。(继承自 TextWriter)

        5、StreamWriter 类的方法

Close()  关闭当前 StreamWriter 对象和基础流。
CreateObjRef(Type)  创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(继承自 MarshalByRefObject)
Dispose()  释放由 TextWriter 对象使用的所有资源。(继承自 TextWriter)
Dispose(Boolean)  使所有缓冲数据写入基础流,释放 StreamWriter 使用的非托管资源,同时还可以根据需要释放受管理资源。
DisposeAsync()  异步释放由 TextWriter 对象使用的所有资源。(继承自 TextWriter)
Equals(Object)  确定指定对象是否等于当前对象。(继承自 Object)
Flush()  清理当前写入器的所有缓冲区,并使所有缓冲数据写入基础流。
FlushAsync()  异步清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备。(继承自 TextWriter)
GetHashCode()  作为默认哈希函数。(继承自 Object)
GetLifetimeService()  检索控制此实例的生存期策略的当前生存期服务对象。(继承自 MarshalByRefObject)
GetType()  获取当前实例的 Type。(继承自 Object)
InitializeLifetimeService()  获取生存期服务对象来控制此实例的生存期策略。(继承自 MarshalByRefObject)
MemberwiseClone()  创建当前 Object 的浅表副本。(继承自 Object)
MemberwiseClone(Boolean)  创建当前 MarshalByRefObject 对象的浅表副本。(继承自 MarshalByRefObject)
ToString()  返回表示当前对象的字符串。(继承自 Object)
Write(Boolean)  Boolean 值的文本表示形式写入文本流。(继承自 TextWriter)
Write(Char)  将字符写入流。
Write(Char[])  将字符数组写入流。
Write(Char[], Int32, Int32)  将字符的子数组写入流。
Write(Decimal)  将小数值的文本表示形式写入文本流。(继承自 TextWriter)
Write(Double)  将 8 字节浮点值的文本表示形式写入文本流。(继承自 TextWriter)
Write(Int32)  将 4 字节带符号整数的文本表示形式写入文本流。(继承自 TextWriter)
Write(Int64)  将 8 字节带符号整数的文本表示形式写入文本流。(继承自 TextWriter)
Write(Object)  通过在对象上调用 ToString 方法将此对象的文本表示形式写入文本流。(继承自 TextWriter)
Write(ReadOnlySpan<Char>)  将字符范围写入文本流。(继承自 TextWriter)
Write(Single)  将 4 字节浮点值的文本表示形式写入文本流。(继承自 TextWriter)
Write(String)  将字符串写入流。
Write(String, Object)  使用与 Format(String, Object) 方法相同的语义将格式化字符串写入文本流。(继承自 TextWriter)
Write(String, Object, Object)  使用与 Format(String, Object, Object) 方法相同的语义将格式化字符串写入文本流。(继承自 TextWriter)
Write(String, Object, Object, Object)  使用与 Format(String, Object, Object, Object) 方法相同的语义将格式化字符串写入文本流。(继承自 TextWriter)
Write(String, Object[])  使用与 Format(String, Object[]) 方法相同的语义将格式化字符串写入文本流。(继承自 TextWriter)
Write(StringBuilder)  将字符串生成器写入文本流。(继承自 TextWriter)
Write(UInt32)  将 4 字节无符号整数的文本表示形式写入文本流。(继承自 TextWriter)
Write(UInt64)  将 8 字节无符号整数的文本表示形式写入文本流。(继承自 TextWriter)
WriteAsync(Char)  将字符异步写入文本流。(继承自 TextWriter)
WriteAsync(Char[])  将字符数组异步写入文本流。(继承自 TextWriter)
WriteAsync(Char[], Int32, Int32)  以异步形式将字符的子数组写入文本流。(继承自 TextWriter)
WriteAsync(ReadOnlyMemory<Char>, CancellationToken)  以异步形式将字符内存区域写入文本流。(继承自 TextWriter)
WriteAsync(String)  将字符串异步写入文本流。(继承自 TextWriter)
WriteAsync(StringBuilder, CancellationToken)  以异步形式将字符串生成器写入文本流。(继承自 TextWriter)
WriteLine()  将行终止符写入文本流。(继承自 TextWriter)
WriteLine(Boolean)  Boolean 值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Char)  将字符写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Char[])  将字符数组写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Char[], Int32, Int32)  将字符子数组写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Decimal)  将小数值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Double)  将 8 字节浮点值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Int32)  将 4 字节带符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Int64)  将 8 字节带符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Object)  通过在对象上调用 ToString 方法将此对象的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(ReadOnlySpan<Char>)  将字符范围的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(Single)  将 4 字节浮点值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(String)  将字符串写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(String, Object)  使用与 Format(String, Object) 方法相同的语义将格式化字符串和新行写入文本流。(继承自 TextWriter)
WriteLine(String, Object, Object)  使用与 Format(String, Object, Object) 方法相同的语义将格式化字符串和新行写入文本流。(继承自 TextWriter)
WriteLine(String, Object, Object, Object)  使用与 Format(String, Object) 相同的语义将格式化字符串和新行写入文本流。(继承自 TextWriter)
WriteLine(String, Object[])  使用与 Format(String, Object) 相同的语义将格式化字符串和新行写入文本流。(继承自 TextWriter)
WriteLine(StringBuilder)  将字符串生成器的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(UInt32)  将 4 字节无符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLine(UInt64)  将 8 字节无符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync()  以异步形式将行终止符写入文本流。(继承自 TextWriter)
WriteLineAsync(Char)  以异步形式将字符写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync(Char[])  以异步形式将字符数组写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync(Char[], Int32, Int32)  以异步形式将字符子数组写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync(ReadOnlyMemory<Char>, CancellationToken)  以异步形式将字符内存区域的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync(String)  以异步形式将字符串写入文本流,后跟行终止符。(继承自 TextWriter)
WriteLineAsync(StringBuilder, CancellationToken)  以异步形式将字符串生成器的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter)

        二、StreamReader 类

StreamReader 类https://docs.microsoft.com/zh-cn/dotnet/api/system.io.streamreader?view=netframework-4.0

        1、定义
        实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。专门用来读取文本文件的类。StreamReader类可以从底层Stream对象创建StreamReader对象的实例,而且还能指定编码规范参数。在创建StreamReader对象后,StreamReader类提供了许多用于读取和浏览字符数据的方法。

  • 命名空间:System.IO
  • 程序集:mscorlib.dll
  • 继承:Object→→MarshalByRefObject→TextReader→StreamReader
  • 属性:SerializableAttribute,ComVisibleAttribute
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class StreamReader : System.IO.TextReader

        2、StreamReader 类的构造函数

StreamReader(Stream)  为指定的流初始化 StreamReader 类的新实例。
StreamReader(Stream, Boolean)  用指定的字节顺序标记检测选项,为指定的流初始化 StreamReader 类的一个新实例。
StreamReader(Stream, Encoding)  用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。
StreamReader(Stream, Encoding, Boolean)  为指定的流初始化 StreamReader 类的新实例,带有指定的字符编码和字节顺序标记检测选项。
StreamReader(Stream, Encoding, Boolean, Int32)  为指定的流初始化 StreamReader 类的新实例,带有指定的字符编码、字节顺序标记检测选项和缓冲区大小。
StreamReader(String)  为指定的文件名初始化 StreamReader 类的新实例。
StreamReader(String, Boolean)  为指定的文件名初始化 StreamReader 类的新实例,带有指定的字节顺序标记检测选项。
StreamReader(String, Encoding)  用指定的字符编码,为指定的文件名初始化 StreamReader 类的一个新实例。
StreamReader(String, Encoding, Boolean)  为指定的文件名初始化 StreamReader 类的新实例,带有指定的字符编码和字节顺序标记检测选项。
StreamReader(String, Encoding, Boolean, Int32)  为指定的文件名初始化 StreamReader 类的新实例,带有指定字符编码、字节顺序标记检测选项和缓冲区大小。

        2、StreamReader 类的字段

Null  空流周围的 StreamReader。

        3、StreamReader 类的属性

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

        3、StreamReader 类的方法

Close()  关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。
CreateObjRef(Type)  创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(继承自 MarshalByRefObject)
DiscardBufferedData()  清除内部缓冲区。
Dispose()  释放由 TextReader 对象使用的所有资源。(继承自 TextReader)
Dispose(Boolean)  关闭基础流,释放 StreamReader 使用的未托管资源,同时还可以根据需要释放托管资源。
Equals(Object)  确定指定对象是否等于当前对象。(继承自 Object)
GetHashCode()  作为默认哈希函数。(继承自 Object)
GetLifetimeService()  检索控制此实例的生存期策略的当前生存期服务对象。(继承自 MarshalByRefObject)
GetType()  获取当前实例的 Type。(继承自 Object)
InitializeLifetimeService()  获取生存期服务对象来控制此实例的生存期策略。(继承自 MarshalByRefObject)
MemberwiseClone()  创建当前 Object 的浅表副本。(继承自 Object)
MemberwiseClone(Boolean)  创建当前 MarshalByRefObject 对象的浅表副本。(继承自 MarshalByRefObject)
Peek()  返回下一个可用字符,但不使用它。
Read()  读取输入流中的下一个字符并使该字符位置提升一个字符。
Read(Char[], Int32, Int32)  从指定的索引位置开始将来自当前流的指定的最多字符读到缓冲区。
Read(Span<Char>)  从当前读取器中读取字符,并将数据写入指定的缓冲区。(继承自 TextReader)
ReadAsync(Char[], Int32, Int32)  异步从当前文本读取器中读取指定最大字符数并从指定索引开始将该数据写入缓冲区。(继承自 TextReader)
ReadAsync(Memory<Char>, CancellationToken)  将当前流中的字符异步读入内存块。(继承自 TextReader)
ReadBlock(Char[], Int32, Int32)  从当前文本读取器中读取指定的最大字符数并从指定索引处开始将该数据写入缓冲区。(继承自 TextReader)
ReadBlock(Span<Char>)  从当前流中读取字符并将数据写入缓冲区。(继承自 TextReader)
ReadBlockAsync(Char[], Int32, Int32)  异步从当前文本读取器中读取指定最大字符数并从指定索引开始将该数据写入缓冲区。(继承自 TextReader)
ReadBlockAsync(Memory<Char>, CancellationToken)  从当前流中异步读取字符并将数据写入缓冲区。(继承自 TextReader)
ReadLine()  从当前流中读取一行字符并将数据作为字符串返回。
ReadLineAsync()  异步读取一行字符并将数据作为字符串返回。(继承自 TextReader)
ReadLineAsync(CancellationToken)  异步读取一行字符并将数据作为字符串返回。(继承自 TextReader)
ReadToEnd()  读取来自流的当前位置到结尾的所有字符。
ReadToEndAsync()  异步读取从当前位置到文本读取器末尾的所有字符并将它们作为一个字符串返回。(继承自 TextReader)
ReadToEndAsync(CancellationToken)  异步读取从当前位置到文本读取器末尾的所有字符并将它们作为一个字符串返回。(继承自 TextReader)
ToString()  返回表示当前对象的字符串。(继承自 Object)

        三、示例(1)

using System;
using System.IO;
using System.Windows.Forms;

namespace _20220901_3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //在form中通过一个按钮和saveFileDialog组件,保存"abcdefg"到一个txt文件中
            saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
            saveFileDialog1.ShowDialog();
            StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, true);
            sw.WriteLine("abcdefg");
            sw.Close();
        }
    }
}

         四、示例(2)

using System;
using System.IO;
using System.Windows.Forms;

namespace Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("输入不可为空");
            }
            else
            {
                saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";//定义这个组件保存的格式

                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //使用“另存为”对话框中输入的文件名实例化StreamWriter对象
                    StreamWriter sw1 = new StreamWriter(saveFileDialog1.FileName, true);//构造函数的实例
                    //若要追加数据到该文件中,则为 true;若要覆盖该文件,则为 false。 
                    //如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。

                    sw1.WriteLine(textBox1.Text);//将输入的内容向创建的文件中写入内容
                    sw1.Close();//关闭当前文件写入流
                }
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "文本文件(*.txt)|*.txt";//定义这个组件打开的格式
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = string.Empty;
                StreamReader sr1 = new StreamReader(openFileDialog1.FileName);//使用“打开”对话框中选择的文件实例化StreamReader对象
                textBox1.Text = sr1.ReadToEnd();//调用ReadToEnd方法读取选中文件的全部内容//ReadToEnd读取来自流的当前位置到结尾的所有字符。
                sr1.Close();//关闭当前文件读取流
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/126651070