讀取及寫入檔案

已完成

從檔案讀取資料並將資料寫入檔案是 .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、固定寬度或其他格式的檔案。 在那些情況下,最好搜尋 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 的銷售總額專案。 公司的商務系統接著就可以處理該檔案。