Read and write to files
Reading data from files and writing data to files are core concepts in .NET.
Tailwind Traders needs to write the total of all the individual store sales files to a new file, then load the file into the company's sales system.
Here, you learn how to use the File
class to read and write to files.
Read data from files
Files are read through the ReadAllText
method on the File
class.
File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
The return object from ReadAllText
is a string.
{
"total": 22385.32
}
Parse data in files
This data in its string format doesn't do you much good. It's still just characters, but now in a format that you can read. You want the ability to parse this data into a format that you can use programmatically.
There are many ways to parse JSON files with .NET, including a community library known as Json.NET.
You can add the Json.NET package to your project by using NuGet:
dotnet add package Newtonsoft.Json
Then, add using Newtonsoft.Json
to the top of your class file:
using Newtonsoft.Json;
And use the JsonConvert.DeserializeObject
method:
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; }
}
Tip
Files come in a variety of formats. JSON files are the most desirable to work with because of the built-in support in the language. You also might encounter files that are .csv, fixed width, or some other format. In that case, it's best to search nuget.org for a parser for that file type.
Write data to files
You learned how to write files in the previous exercise; it's just that you wrote an empty one. To write data to a file, use the same WriteAllText
method, but pass in the data that you want to write.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());
// totals.txt
// 22385.32
Append data to files
In the preceding example, the file is overwritten every time you write to it. Sometimes, you don't want that. You want to append data to the file instead of replacing it entirely. You can append data with the File.AppendAllText
method. By default, File.AppendAllText
creates the file if it doesn't already exist.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");
// totals.txt
// 22385.32
// 22385.32
Tip
In the preceding code example, Environment.NewLine
prompts .NET to put the value on its own line. If you didn't pass this value, you would get all the numbers squished together on the same line.
In the next exercise, you'll finish the sales-total project for Tailwind Traders by reading all the sales files and writing the grand total to a .txt file. The company's commerce system can then process the file.