Latihan - Baca dan tulis ke file
Anda juga dapat menggunakan File kelas di .NET untuk menulis data ke file dan membaca data dari file.
Anda hampir selesai membuat mahakarya .NET untuk Tailwind Traders. Sejauh ini, kode Anda membaca direktori apa pun, menemukan semua file .json, dan membuat file totals.txt .
Dalam latihan ini, Anda menyelesaikan proyek dengan membaca file .json, menambahkan total penyimpanan, dan menulis total keseluruhan ke file totals.txt .
Menambahkan Newtonsoft.Json ke proyek
Menggunakan terminal, tambahkan Newtonsoft.Json ke proyek.
dotnet add package Newtonsoft.Json
Bersiap untuk data penjualan
Di bagian
Program.csatas , tambahkanusing Newtonsoft.Json:using Newtonsoft.Json;Di
Program.cslangsung diFindFilesbawah metode , tambahkan barurecordyang memodelkan data sales.json :record SalesData (double Total);
Membuat metode yang menghitung total penjualan
Di
Program.cs, tepat sebelumrecordbaris yang Anda tambahkan di langkah sebelumnya, buat fungsi baru yang menghitung total penjualan. Metode ini harus mengambilIEnumerable<string>jalur file yang dapat diulangi.double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // READ FILES LOOP return salesTotal; }Dalam metode itu, ganti
// READ FILES LOOPdengan perulangan yang berulang di atassalesFiles, membaca file, mengurai konten sebagai JSON, lalu menaikkansalesTotalvariabel dengantotalnilai dari file:double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // Loop over each file path in salesFiles foreach (var file in salesFiles) { // Read the contents of the file string salesJson = File.ReadAllText(file); // Parse the contents as JSON SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson); // Add the amount found in the Total field to the salesTotal variable salesTotal += data?.Total ?? 0; } return salesTotal; }
Panggil metode CalculateSalesTotals
Program.csDalam file, tambahkan panggilan keCalculateSalesTotalfungsi tepat di atasFile.WriteAllTextpanggilan:var currentDirectory = Directory.GetCurrentDirectory(); var storesDir = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); var salesFiles = FindFiles(storesDir); var salesTotal = CalculateSalesTotal(salesFiles); // Add this line of code File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
Tulis total ke file totals.txt
Di
Program.csfile, ubahFile.WriteAllTextblok untuk menulis nilaisalesTotalvariabel ke file totals.txt. Saat Anda melakukannya, ubahFile.WriteAllTextpanggilan menjadiFile.AppendAllTextsehingga tidak ada dalam file yang akan ditimpa.var currentDirectory = Directory.GetCurrentDirectory(); var storesDir = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); var salesFiles = FindFiles(storesDir); var salesTotal = CalculateSalesTotal(salesFiles); File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");Simpan file Program.cs dengan menekan Ctrl+S / Cmd+S.
Jalankan program
Jalankan program dari terminal:
dotnet runTidak ada output dari program. Jika Anda melihat dalam file salesTotalDir/totals.txt , Anda menemukan total semua penjualan dari file sales.json .
Jalankan program dari terminal lagi.
dotnet runPilih file salesTotalDir/totals.txt.
File totals.txt sekarang memiliki baris kedua. Setiap kali Anda menjalankan program, total ditambahkan lagi dan baris baru ditulis ke file.
Pekerjaan luar biasa! Anda menulis alat cerdas, kuat, dan berguna yang dapat digunakan Tailwind Traders untuk memproses semua penjualan tokonya setiap malam. Di unit berikutnya, kami akan meninjau apa yang Anda pelajari dan beberapa tips untuk diingat.
Macet?
Jika Anda terjebak selama latihan ini, berikut adalah kode lengkap untuk proyek ini:
using Newtonsoft.Json;
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDirectory);
var salesTotal = CalculateSalesTotal(salesFiles);
File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}
double CalculateSalesTotal(IEnumerable<string> salesFiles)
{
double salesTotal = 0;
// Loop over each file path in salesFiles
foreach (var file in salesFiles)
{
// Read the contents of the file
string salesJson = File.ReadAllText(file);
// Parse the contents as JSON
SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
// Add the amount found in the Total field to the salesTotal variable
salesTotal += data?.Total ?? 0;
}
return salesTotal;
}
record SalesData (double Total);