读取和写入文件

已完成

从文件读取数据并将数据写入文件是 .NET 中的核心概念。

Tailwind Traders 需要将其所有单个商店销售文件的总额写入新文件。 然后,将此文件加载到公司的销售系统中。

现在,你将学习如何使用 File 类来对文件进行读取和写入。

从文件读取数据

通过 File 类上的 ReadAllText 方法读取文件。

File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");

ReadAllText 的返回对象是一个字符串。

{
  "total": 22385.32
}

分析文件中的数据

字符串格式的此数据并没有太大好处。 它仍然只是一些字符,但现在采用了一种可以读取的格式。 你希望能够将此数据分析为可通过编程方式使用的格式。

使用 .NET 分析 JSON 文件的方法有很多,包括名为 Json.NET 的社区库。

可以使用 NuGet 将 Json.NET 包添加到项目中:

dotnet add package Newtonsoft.Json

然后,将 using Newtonsoft.Json 添加到类文件的顶部:

using Newtonsoft.Json; 

然后使用 JsonConvert.DeserializeObject 方法:

var salesJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
var salesData = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

Console.WriteLine(salesData.Total);

class SalesTotal
{
  public double Total { get; set; }
}

提示

文件有多种格式。 由于语言中带有内置支持,JSON 文件最常用。 你也可能会遇到 .csv、fixed width 或其他格式的文件。 在这种情况下,最好搜索 nuget.org 来查找相应文件类型的分析程序。

将数据写入文件

在上一个练习中学习了如何编写文件;只不过编写的是一个空文件。 若要将数据写入文件,请使用相同的 WriteAllText 方法,但传入要写入的数据。

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());

// totals.txt
// 22385.32

将数据追加到文件

在前面的示例中,每次对文件进行写入时,都会覆盖该文件。 有时,你不想那样做。 你想要将数据追加到文件,而不是完全替换它。 可以使用 File.AppendAllText 方法追加数据。 默认情况下,如果文件尚不存在,File.AppendAllText 将创建该文件。

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");

// totals.txt
// 22385.32
// 22385.32

提示

在前面的代码示例中,Environment.NewLine 提示 .NET 将值放在其所在的行上。 如果未传递此值,会导致同一行中的所有数字挤在一起。

在下一练习中,你将通过读取所有销售文件并将总合写入 txt 文件,来完成 Tailwind Traders 的销售总额项目。 在此之后公司的商务系统便可以处理该文件。