当前位置: 首页 > news >正文

【.Net实用方法总结】 整理并总结System.IO中StreamWriter类及其方法介绍

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页:会敲键盘的肘子
🐰系列专栏:.Net实用方法总结
🦀专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
🐶座右铭:总有一天你所坚持的会反过来拥抱你。


在这里插入图片描述

🌈写在前面:

本文主要介绍System.IO命名空间的StreamWriter 类,介绍其常用的方法和示例说明。


👉本文关键字:System.IO、StreamWriter类、方法示例、C#

文章目录

      • 1️⃣ System.IO命名空间
      • 2️⃣ StreamWriter类
        • ♈ 定义
        • ♉ 构造函数
          • StreamWriter(Stream) 初始化 StreamWriter类的新实例。
          • StreamWriter(String) 使用指定的格式控件初始化 StreamWriter类的新实例
          • StreamWriter(Stream, Encoding) 使用指定的编码及默认的缓冲区大小,为指定的流初始化 StreamWriter 类的新实例
          • StreamWriter(String, Boolean) 用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
          • StreamWriter(Stream, Encoding, Int32) 使用指定的编码及缓冲区大小,为指定的流初始化 StreamWriter 类的新实例
          • StreamWriter(String, Boolean, Encoding) 使用指定的编码和默认的缓冲区大小,为指定的文件初始化 StreamWriter 类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
          • StreamWriter(Stream, Encoding, Int32, Boolean) 使用指定的编码和缓冲区大小,为指定的流初始化 StreamWriter类的新实例,并可以选择保持流处于打开状态
          • StreamWriter(String, Boolean, Encoding, Int32) 使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
        • ♊ 属性
          • AutoFlush 获取或设置一个值,该值指示 StreamWriter在每次调用 Write(Char) 之后是否都将其缓冲区刷新到基础流
        • ♌ 常用方法
          • Close() 关闭当前的 StreamWriter 和基础流
          • Dispose() 释放由 WriteReader 对象使用的所有资源
          • Flush() 清除此流的缓冲区,使得所有缓冲数据都写入到文件中
          • FlushAsync() 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中
          • Write(Char[], Int32, Int32) 将字符的子数组写入文本流
          • WriteAsync(Char[], Int32, Int32) 以异步形式将字符的子数组写入文本流
          • WriteLine() 将行终止符写入文本流
          • WriteLine(Char[], Int32, Int32) 将字符的子数组写入文本流,后跟行终止符
          • Write(String)/Write(double)/Write(Int32)... 将`字符串、数值等`写入文本流
          • WriteAsync(Char[], Int32, Int32) 将字符的子数组异步写入该流
          • WriteLine(String)/WriteLine(double)/WriteLine(Int32)... 将`字符串、数值等`写入文本流,后跟行终止符
          • WriteLineAsync(Char[], Int32, Int32) 将字符的子数组异步写入流,后跟行结束符
        • ♎ 更多方法

1️⃣ System.IO命名空间

.NET中的IO操作命名空间,包含允许读写文件数据流的类型以及提供基本文件和目录支持的类型。

我们在.NET中的IO操作,经常需要调用一下几个类。

  • FileStream类

​ 文件流类,负责大文件的拷贝,读写。

  • Path类

​ Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。

  • File类

    File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。

  • Dirctory类

    目录操作,创建文件、删除目录,获取目录下文件名等等。

2️⃣ StreamWriter类

♈ 定义

实现一个 TextWriter,使其以一种特定的编码向流中写入字符。

public class StreamWriter : System.IO.TextWriter

示例

下面的示例演示如何使用 StreamWriter 对象写入一个文件,该文件列出 C 驱动器上的目录,然后使用 StreamReader 对象读取和显示每个目录名称。 一种很好的做法是在语句中使用这些对象, using 以便正确地释放非托管资源。 using当使用对象的代码已完成时,该语句会自动对 Dispose 该对象调用。 在此示例中使用的构造函数不支持在 Windows 应用商店应用程序中使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace StreamReadWrite
{
    class Program
    {
        static void Main(string[] args)
        {
            // Get the directories currently on the C drive.
            DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories();

            // Write each directory name to a file.
            using (StreamWriter sw = new StreamWriter("CDriveDirs.txt"))
            {
                foreach (DirectoryInfo dir in cDirs)
                {
                    sw.WriteLine(dir.Name);
                }
            }

            // Read and show each line from the file.
            string line = "";
            using (StreamReader sr = new StreamReader("CDriveDirs.txt"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }
        }
    }
}

♉ 构造函数

StreamWriter(Stream) 初始化 StreamWriter类的新实例。
public StreamWriter (System.IO.Stream stream);

参数

stream

Stream

要写入的流。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";
            FileStream fs = null;
            try
            {
                fs = new FileStream(fileName, FileMode.CreateNew);
                using (StreamWriter writer = new StreamWriter(fs))
                {
                    writer.Write(textToAdd);
                }
            }
            finally
            {
                if (fs != null)
                    fs.Dispose();
            }
        }
    }
}
StreamWriter(String) 使用指定的格式控件初始化 StreamWriter类的新实例
public StreamWriter (string path);

参数

path

String

要写入的完整文件路径。 path 可以是一个文件名。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";

            using (StreamWriter writer = new StreamWriter(fileName))
            {
                writer.Write(textToAdd);
            }
        }
    }
}
StreamWriter(Stream, Encoding) 使用指定的编码及默认的缓冲区大小,为指定的流初始化 StreamWriter 类的新实例
public StreamWriter (System.IO.Stream stream, System.Text.Encoding encoding);

参数

stream

Stream

要写入的流。

encoding

Encoding

要使用的字符编码。

示例

下面的示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";
            FileStream fs = null;
            try
            {
               fs = new FileStream(fileName, FileMode.CreateNew);
               using (StreamWriter writer = new StreamWriter(fs, Encoding.Default))
                {
                    writer.Write(textToAdd);
                }
            }
            finally
            {
                if (fs != null)
                    fs.Dispose();
            }
        }
    }
}
StreamWriter(String, Boolean) 用默认编码和缓冲区大小,为指定的文件初始化 StreamWriter 类的一个新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
public StreamWriter (string path, bool append);

参数

path

String

要写入的完整文件路径。

append

Boolean

若要追加数据到该文件中,则为 true;若要覆盖该文件,则为 false。 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";

            using (StreamWriter writer = new StreamWriter(fileName, true))
            {
                writer.Write(textToAdd);
            }
        }
    }
}
StreamWriter(Stream, Encoding, Int32) 使用指定的编码及缓冲区大小,为指定的流初始化 StreamWriter 类的新实例
public StreamWriter (System.IO.Stream stream, System.Text.Encoding encoding, int bufferSize);

参数

stream

Stream

要写入的流。

encoding

Encoding

要使用的字符编码。

bufferSize

Int32

缓冲区大小(以字节为单位)。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";
            FileStream fs = null;
            try
            {
                fs = new FileStream(fileName, FileMode.CreateNew);
                using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8, 512))
                {
                    writer.Write(textToAdd);
                }
            }
            finally
            {
                if (fs != null)
                    fs.Dispose();
            }
        }
    }
}
StreamWriter(String, Boolean, Encoding) 使用指定的编码和默认的缓冲区大小,为指定的文件初始化 StreamWriter 类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
public StreamWriter (string path, bool append, System.Text.Encoding encoding);

参数

path

String

要写入的完整文件路径。

append

Boolean

若要追加数据到该文件中,则为 true;若要覆盖该文件,则为 false。 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。

encoding

Encoding

要使用的字符编码。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";

            using (StreamWriter writer = new StreamWriter(fileName, true, Encoding.UTF8))
            {
                writer.Write(textToAdd);
            }
        }
    }
}
StreamWriter(Stream, Encoding, Int32, Boolean) 使用指定的编码和缓冲区大小,为指定的流初始化 StreamWriter类的新实例,并可以选择保持流处于打开状态
public StreamWriter (System.IO.Stream stream, System.Text.Encoding? encoding = default, int bufferSize = -1, bool leaveOpen = false);

参数

stream

Stream

要写入的流。

encoding

Encoding

要使用的字符编码。

bufferSize

Int32

缓冲区大小(以字节为单位)。

leaveOpen

Boolean

如果在释放 StreamWriter 对象后保持流处于打开状态,则为 true;否则为 false

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";
            FileStream fs = null;
            try
            {
                fs = new FileStream(fileName, FileMode.CreateNew);
                using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8, 512, false))
                {
                    writer.Write(textToAdd);
                }
            }
            finally
            {
                if (fs != null)
                    fs.Dispose();
            }
        }
    }
}
StreamWriter(String, Boolean, Encoding, Int32) 使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter类的新实例。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件
public StreamWriter (string path, bool append, System.Text.Encoding encoding, int bufferSize);

参数

path

String

要写入的完整文件路径。

append

Boolean

若要追加数据到该文件中,则为 true;若要覆盖该文件,则为 false。 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。

encoding

Encoding

要使用的字符编码。

bufferSize

Int32

缓冲区大小(以字节为单位)。

示例

下面的代码示例演示了此构造函数。

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";

            using (StreamWriter writer = new StreamWriter(fileName, true, Encoding.UTF8, 512))
            {
                writer.Write(textToAdd);
            }
        }
    }
}

♊ 属性

AutoFlush 获取或设置一个值,该值指示 StreamWriter在每次调用 Write(Char) 之后是否都将其缓冲区刷新到基础流
public virtual bool AutoFlush { get; set; }

示例

// Gets or sets a value indicating whether the StreamWriter
// will flush its buffer to the underlying stream after every
// call to StreamWriter.Write.
sw.AutoFlush = true;

♌ 常用方法

Close() 关闭当前的 StreamWriter 和基础流
public override void Close ();

示例

此代码示例是为构造函数提供的大型示例的 StringWriter(StringBuilder) 一部分。

strWriter.Close();

// Since the StringWriter is closed, an exception will
// be thrown if the Write method is called. However,
// the StringBuilder can still manipulate the string.
strBuilder.Insert(0, "Invalid ");
Console.WriteLine(strWriter.ToString());
Dispose() 释放由 WriteReader 对象使用的所有资源
public void Dispose ();
Flush() 清除此流的缓冲区,使得所有缓冲数据都写入到文件中
public override void Flush ();
FlushAsync() 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中
public override System.Threading.Tasks.Task FlushAsync ();

返回

Task

表示异步刷新操作的任务。

Write(Char[], Int32, Int32) 将字符的子数组写入文本流
public override void Write (char[] buffer, int index, int count);

参数

buffer

Char[]

要从中写出数据的字符数组。

index

Int32

在开始接收数据时缓存中的字符位置。

count

Int32

要写入的字符数。

示例

此示例从一个13元素数组向文件写入8个字符,从数组的第三个元素开始。

using System;
using System.IO;

public class SWBuff
{
    public static void Main(String[] args)
    {
        FileStream sb = new FileStream("MyFile.txt", FileMode.OpenOrCreate);
        char[] b = {'a','b','c','d','e','f','g','h','i','j','k','l','m'};
        StreamWriter sw = new StreamWriter(sb);
        sw.Write(b, 3, 8);
        sw.Close();
    }
}
WriteAsync(Char[], Int32, Int32) 以异步形式将字符的子数组写入文本流
public virtual System.Threading.Tasks.Task WriteAsync (char[] buffer, int index, int count);

参数

buffer

Char[]

要从中写出数据的字符数组。

index

Int32

在开始接收数据时缓存中的字符位置。

count

Int32

要写入的字符数。

返回

Task<Int32>

表示异步写入操作的任务。

示例

下面的示例演示如何使用方法将多个字符写入文本文件 [WriteAsync(Char], Int32, Int32) 。

using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program5
    {
        static void Main()
        {
            WriteCharacters();
        }

        static async void WriteCharacters()
        {
            UnicodeEncoding ue = new UnicodeEncoding();
            char[] charsToAdd = ue.GetChars(ue.GetBytes("Example string"));
            using (StreamWriter writer = File.CreateText("newfile.txt"))
            {
                await writer.WriteAsync(charsToAdd, 0, charsToAdd.Length);
            }
        }
    }
}
WriteLine() 将行终止符写入文本流
public virtual void WriteLine ();
WriteLine(Char[], Int32, Int32) 将字符的子数组写入文本流,后跟行终止符
public virtual void WriteLine (char[] buffer, int index, int count);

参数

buffer

Char[]

要从中写出数据的字符数组。

index

Int32

在开始接收数据时缓存中的字符位置。

count

Int32

要写入的字符数。

Write(String)/Write(double)/Write(Int32)… 将字符串、数值等写入文本流
WriteAsync(Char[], Int32, Int32) 将字符的子数组异步写入该流
public override System.Threading.Tasks.Task WriteAsync (char[] buffer, int index, int count);

参数

buffer

Char[]

要从中写出数据的字符数组。

index

Int32

在开始接收数据时缓存中的字符位置。

count

Int32

要写入的字符数。

示例

下面的示例演示如何使用方法将多个字符写入文本文件 [WriteAsync(Char], Int32, Int32) 。

using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program5
    {
        static void Main()
        {
            WriteCharacters();
        }

        static async void WriteCharacters()
        {
            UnicodeEncoding ue = new UnicodeEncoding();
            char[] charsToAdd = ue.GetChars(ue.GetBytes("Example string"));
            using (StreamWriter writer = File.CreateText("newfile.txt"))
            {
                await writer.WriteAsync(charsToAdd, 0, charsToAdd.Length);
            }
        }
    }
}
WriteLine(String)/WriteLine(double)/WriteLine(Int32)… 将字符串、数值等写入文本流,后跟行终止符
WriteLineAsync(Char[], Int32, Int32) 将字符的子数组异步写入流,后跟行结束符
public override System.Threading.Tasks.Task WriteLineAsync (char[] buffer, int index, int count);

参数

buffer

Char[]

要从中写出数据的字符数组。

index

Int32

在开始接收数据时缓存中的字符位置。

count

Int32

要写入的字符数。

示例

下面的示例演示如何使用方法将字符写入文本文件中的两个单独的行 [WriteLineAsync(Char], Int32, Int32) 。 第一行包含字符串中的前11个字符, (字母 “First line” 后跟一个空格) 。 第二行包含字符串中的剩余字符 (字母 “和第二行” ) 。

using System.IO;
using System.Text;

namespace ConsoleApplication
{
    class Program6
    {
        static void Main()
        {
            WriteCharacters();
        }

        static async void WriteCharacters()
        {
            UnicodeEncoding ue = new UnicodeEncoding();
            char[] charsToAdd = ue.GetChars(ue.GetBytes("First line and second line"));
            using (StreamWriter writer = File.CreateText("newfile.txt"))
            {
                await writer.WriteLineAsync(charsToAdd, 0, 11);
                await writer.WriteLineAsync(charsToAdd, 11, charsToAdd.Length - 11);
            }
        }
    }
}

♎ 更多方法

更多方法请查阅官方文档StreamWrite类。


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

希望写在这里的小伙伴能给个三连支持

相关文章:

  • openGl坐标系统
  • 实用工具系列 - Pycharm安装下载使用
  • Pyecharts绘图笔记
  • SNARK性能及安全
  • 学会 Python 自动安装第三方库,从此跟pip说拜拜
  • 3.前端开发就业前景
  • Discovery服务发现与Eureka自我保护机制及总结步骤
  • 机器学习01
  • 类加载器及反射简单笔记
  • MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度
  • leetcode竞赛:20220918周赛
  • 牛客刷题,python入门基础(11)
  • 循序渐进学Git(可复习)
  • 力扣 6181. 最长的字母序连续子字符串的长度
  • Chapter8:控制系统状态空间分析
  • 【comparator, comparable】小总结
  • 【React系列】如何构建React应用程序
  • Asm.js的简单介绍
  • HTML5新特性总结
  • Javascript 原型链
  • Java方法详解
  • Java应用性能调优
  • maven工程打包jar以及java jar命令的classpath使用
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Terraform入门 - 1. 安装Terraform
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序开发问题汇总
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # C++之functional库用法整理
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (30)数组元素和与数字和的绝对差
  • (SERIES12)DM性能优化
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (一)面试需要掌握的技巧
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)Google的Objective-C编码规范
  • .bat批处理出现中文乱码的情况
  • .form文件_一篇文章学会文件上传
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Project Open Day(2011.11.13)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 服务 ServiceController
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET建议使用的大小写命名原则
  • /*在DataTable中更新、删除数据*/