C# StreamReader类和StreamWriter类
先看看 StreamReader,将前面的示例转换为读取文件以使用 StreamReader。它现在看起来容易得多。StreamReader 的构造函数接收FileStream。使用 EndOfStream 属性可以检查文件的末尾,使用ReadLine 方法读取文本行:
public static void ReadFileUsingReader(string fileName)
{var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);using (var reader = new StreamReader(stream)){while (!reader.EndofStream){string line = reader.ReadLine(); Console.WriteLine(line);}}
}
不再需要处理字节数组和编码。然而注意,StreamReader 默认使用 UTF-8 编码。指定另一个构造函数,可以让 StreamReader 使用文件中序言定义的编码:
var reader = new StreamReader(stream, detectEncodingFromByteOrderMarks: true);
也可以显式地指定编码:
var reader = new StreamReader(stream, Encoding.Unicode);
其他构造函数允许设置要使用的缓冲区;默认为 1024 个字节。此外,还可以指定关闭读取器时不应该关闭底层流。默认情况下,关闭读取器时(使用 Dispose 方法),会关闭底层流。
不显式实例化新的 StreamReader,而可以使用 File 类的 OpenText 方法创建StreamReader:
var reader = File.OpenText(fileName);
对于读取文件的代码片段,该文件使用 ReadLine 方法逐行读取。StreamReader还允许在流中使用 ReadToEnd 从光标的位置读取完整的文件:
string content = reader.ReadToEnd();
StreamReader 还允许把内容读入一个字符数组。这类似于 Stream 类的 Read 方法;它不读入字节数组,而是读入 char 数组。记住,char 类型使用两个字节。这适合于 16 位 Unicode,但不适合于 UTF-8,其中,一个字符的长度可以是 1 至 6 个字节:
int nChars = 100;
char[] charArray = new char[nChars];
int nCharsRead = reader.Read(charArray, 0, nChars);
StreamWriter 的工作方式与 StreamReader 相同,只是 StreamWriter 仅用于写入文件(或写入另一个流)。下面的代码片段传递 FileStream,创建了一个 StreamWriter。然后把传入的字符串数组写入流:
public static void WritefileUsingWriter(string fileName, string[] lines)
{var outputStream = File.OpenWrite(fileName); using (var writer = new StreamWriter(outputStream)) {byte[] preamble = Encoding.UTF8.GetPreamble();outputStream.Write(preamble, 0, preamble.Length); writer.Write(lines);}
}
记住,StreamWriter 默认使用 UTF-8 格式写入文本内容。通过在构造函数中设置 Encoding 对象,可以定义替代的内容。另外,类似于 StreamReader 的构造函数,StreamWriter 允许指定缓冲区的大小,以及关闭写入器时是否不应该关闭底层流。
StreamWriter 的 Write() 方法定义了 17 个重载版本,允许传递字符串和一些 .NET 数据类型。请记住,使用传递 .NET 数据类型的方法,这些都会使用指定的编码变成字符串。
微信公众号
Dotnet讲堂
C# StreamReader类和StreamWriter类相关推荐
- C#使用StreamReader类和StreamWriter类读写文本文件
StreamReader类和StreamWriter类可以实现读写文本文件,这两个类都在命名空间System.IO下. using System; using System.Collections.G ...
- C# 第七章『I/O数据流』◆第5节:数据流—StreamWriter类、StreamReader类
FileStream类的对象只能以字节的形式读取/写入数据,这就使操作变得非常困难,所以需要借用StreamWriter对象或StreamReader对象的方法来处理文件. 一.StreamWrite ...
- C# StreamReader/StreamWriter类
本章介绍:StreamReader/StreamWriter类: 命名空间:using System.IO 1.StreamReader/StreamWriter类:用来处理流数据,提供了高效的流读写 ...
- C#使用StreamWriter类写入文件文件
除了使用FileStream类读写文本文件,.net还提供了StreamWriter类和StreamReader类专门处理文本文件.这两个类从底层封装了文件流,读写时不用重新编码,提供了更文件的读写方 ...
- C#的StreamWriter类使用说明
C#的StreamWriter类使用说明 一:StreamWriter类简单说明 二:StreamWriter类的构造函数 三:StreamWriter类的字段 四:StreamWriter类的属性 ...
- 指定得文件初始化StreamWriter类得新实例
Initializes a new instance of the System.IO.StreamWriter class for the specified // stream by using ...
- File类与FileInfo类的区别
这些年代码也写了不少,关于文件I/O的操作也写了很多,基本上File类与FileInfo类也没有刻意的去看性能,有时用着也挺糊涂的,今天就将这些I/0操作总结下,老样子贴码 首先先了解清楚下File类 ...
- C#文件操作基础之File类和FileInfo类
文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们经常想到文件夹路径,磁盘存储,文件和文件夹名等方面. I/O流提供一种后备存储写入字 ...
- WebRequest 类和 WebResponse 类
WebRequest类和WebResponse类 WebClient类使用起来比较简单,但是它的功能非常有限,特别是不能使用它提供身份验证证书.这样,在上传数据时问题就出现了,许多站点都不会接受没有身 ...
最新文章
- vue 获取当前时间 格式YYYY-MM-DD
- hadoop 9000端口的服务未启动_IDEA 微服务单项目多端口启动
- 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
- 一步一步详解ID3和C4.5的C++实现
- Redis源码剖析(五)订阅与发布
- 相信应该有百分九十的男生看见这个东西是这个状态吧?
- #4604. The kth maximum number(整体二分 + 树套树)
- 最通俗易懂的乐观锁与悲观锁原理及实现
- 解决ERROR 1044 (42000): Access denied for user
- qt5.4 for android,windows下Qt5.4.2 for android开发环境配置
- vscdoe之通过Ctrl+S实现代码格式自动化
- raid5坏了一块盘怎么办_如果你的硬盘坏了 你的照片还能找回来吗?
- 中国营养与健康调查(CHNS)2018年最新数据
- Android开发中验证码的生成
- Android源码下载编译(TI)
- 移动边缘计算——计算卸载
- Java实现剪切MP3格式的文件_java_java实现酷狗音乐临时缓存文件转换为MP3文件的方法,本文实例讲述了java实现酷狗音 - phpStudy...
- 39元超值!360超级充电器拆解与评测
- 十大api接口平台(接口商)
- MATLAB电话拨号音仿真,MATLAB电话拨号音的合成与识别
热门文章
- nginx log_format详解
- OC开发_Storyboard——MapKit
- flash builder 4.7 debug via usb device iPhone 4s - device not found
- Spring Security3源码分析-http标签解析(转)
- Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
- 做个中国清官网,有人感兴趣吗
- 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
- python并行for循环_Python并行执行for循环
- Ajax跨域提交JSON和JSONP
- UIView 的基础