Ask Learn Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
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.
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
}
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.
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
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.
Having an issue? We can help!
Please sign in to use this experience.
Sign in