从文件读取数据并将数据写入文件是 .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 的销售总额项目。 在此之后公司的商务系统便可以处理该文件。