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();//关闭当前文件读取流}}}
}

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

  1. Halcon 第七章『图像的几何变换』◆第1节:图像的仿射变换(位置变换、形状变换)及应用

    一.介绍 由于相机拍摄的时候可能存在角度偏差,因此实际获得的画面可能会与想象中有所差异.为了校正图像在拍摄中的失真问题,可以对图像进行一些简单的几何变换,如平移.缩放和旋转等,这些是图形学中的基本几何 ...

  2. Halcon 第七章『图像的几何变换』◆第2节:投影变换

    一.介绍 投影变换也叫透射变换.投影映射.透射变换是将图像投影到一个新的视平面,是一种二维坐标到三维坐标的变换. 透射变换是仿射变换的延续,也可以说仿射变换是透射变换的一种特殊形式.其特殊性在于变换后 ...

  3. C# 第六章『交互式图形界面』◆第2节:控件(2)ListView

    一.ListView 类 ListView 类         1.定义 命名空间:System.Windows.Forms 程序集:System.Windows.Forms.dll 表示 Windo ...

  4. Halcon 第五章『模板匹配Matching』◆第5节:基于组件的模板匹配|Component-Based

    一.介绍 基于组件的模板匹配是基于形状匹配的一种应用,也可以说是基于形状的模板匹配的加强版,加强的地方在于,这种方法允许模板中包含多个目标,并且允许目标之间存在相对运动(位移和旋转).区别在于基于形状 ...

  5. C# 第六章『交互式图形界面』◆第6节:MessageBox类

    一.MessageBox 类 MessageBox 类https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.messageb ...

  6. C# 第六章『交互式图形界面』◆第2节:控件(1)

    一.概述 在C#中,控件的基类是位于System.Windows.Forms命名空间下的Control类.Control类定义了控件类的共同属性.方法和事件,其他的控件类都直接或间接地派生自这个基类. ...

  7. C# 第六章『交互式图形界面』◆第4节:FileDialog类 、OpenFileDialog类、SaveFileDialog类、示例

    一.FileDialog 类 FileDialog 类https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.filedial ...

  8. C# 第六章『交互式图形界面』◆第5节:FolderBrowserDialog类、DialogResult枚举

    一.FolderBrowserDialog 类 FolderBrowserDialog 类https://docs.microsoft.com/zh-cn/dotnet/api/system.wind ...

  9. C# 第七章『I/O数据流』◆第4节:数据流—FileStream 类

    System.IO下的Stream类是所有数据流的基类,当用户对数据进行逐字节操作时,首先需要将数据转换为数据流.C#中有许多类型的流,但在处理文件输入/输出时,最主要的类型为FileStream类. ...

  10. C# 第七章『I/O数据流』◆第3节:Directory类、DirectoryInfo类、遍历文件夹

    一.Directory类 Directory 类https://docs.microsoft.com/zh-cn/dotnet/api/system.io.directory?view=netfram ...

最新文章

  1. 求3*4数组的全部元素之和
  2. OpenGL渲染纹理和平面反射
  3. C语言Fibonacci 数列
  4. 《从0到1学习Flink》—— Apache Flink 介绍
  5. makefile运行_NVDIA TX2入门 系列之三:运行Yolov3
  6. web api json_有关使用JSON Web令牌保护无服务器API的速成班
  7. php写进度条原理,php实现进度条原理
  8. 面向项目(二)—— visual studio 的使用
  9. ubuntu11.10 sources.list 资源
  10. 基于matlab的神经网络设计,深度神经网络代码matlab
  11. vs2017如何编写python_vs2017添加python的方法
  12. Nexus 的下载和部署
  13. matlab画图常用函数image、imagesc、imshow区别
  14. MTK6589 电话号码匹配改成11位出错
  15. Flask打包服务器部署全攻略
  16. 普天视PTS-3130C 模拟网络AHD监控 三维云台键盘 PELCO解析程序
  17. STC15单片机定时器0工作模式介绍
  18. docker 内安装字体
  19. 监控系统网络未找到dhcp服务器,监控显示未找到dhcp服务器
  20. linux 服务器 安装网卡驱动,Linux系统下安装Intel千兆网卡驱动

热门文章

  1. rk3568开箱操作
  2. Linux中JavaWeb环境安装
  3. [已解决]多网卡情况下Seata1.5.2分布式事务注册到nacos时ip错误
  4. 鸿蒙系统小米电视,海思芯片加持鸿蒙系统,小米电视的强劲对手:荣耀智慧屏来了!...
  5. js破解 微博登录参数
  6. 图--最短路径(四种算法详解)
  7. 分词的原理和认识以及工具的使用
  8. 2021前端JavaScript面试题及答案
  9. mysql的最小存储单元_数据库最小的存储单位是
  10. JS中定义全局变量的方法