Đọc và ghi vào tệp

Đã hoàn thành

Đọc dữ liệu từ tệp và ghi dữ liệu vào tệp là những khái niệm cốt lõi trong .NET.

Tailwind Traders cần phải viết tổng số của tất cả các tập tin bán hàng riêng lẻ cửa hàng vào một tập tin mới, sau đó tải các tập tin vào hệ thống bán hàng của công ty.

Tại đây, bạn sẽ học cách sử dụng lớp File để đọc và ghi vào tệp.

Đọc dữ liệu từ tệp

Tệp được đọc thông qua phương ReadAllText trên lớp File bạn.

File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");

Đối tượng trả về ReadAllText là một chuỗi.

{
  "total": 22385.32
}

Phân tích dữ liệu trong tệp

Dữ liệu này ở định dạng chuỗi của nó không giúp bạn làm được nhiều điều. Nó vẫn chỉ là ký tự, nhưng bây giờ ở định dạng mà bạn có thể đọc. Bạn muốn khả năng phân tích dữ liệu này thành định dạng mà bạn có thể sử dụng theo chương trình.

Có nhiều cách để phân tích cú pháp tệp JSON với .NET, bao gồm thư viện cộng đồng có tên là Json.NET.

Bạn có thể thêm gói Json.NET dự án của mình bằng cách sử dụng NuGet:

dotnet add package Newtonsoft.Json

Sau đó, using Newtonsoft.Json vào đầu tệp lớp học của bạn:

using Newtonsoft.Json; 

Và sử dụng phương JsonConvert.DeserializeObject này:

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; }
}

Mẹo

Tệp có nhiều định dạng khác nhau. Tệp JSON là tệp mong muốn nhất để làm việc nhờ hỗ trợ tích hợp sẵn trong ngôn ngữ. Bạn cũng có thể gặp phải các tệp .csv, độ rộng cố định hoặc một số định dạng khác. Trong trường hợp đó, tốt nhất bạn nên tìm kiếm nuget.org phân tích cú pháp cho loại tệp đó.

Ghi dữ liệu vào tệp

Bạn đã học được cách viết các tập tin trong bài tập trước; Chỉ là anh đã viết một cái trống. Để ghi dữ liệu vào một tệp, hãy sử dụng cùng một phương WriteAllText, nhưng chuyển vào dữ liệu mà bạn muốn viết.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());

// totals.txt
// 22385.32

Chắp thêm dữ liệu vào tệp

Trong ví dụ trên đây, tệp sẽ được ghi đè mỗi lần bạn viết lên tệp. Đôi khi, bạn không muốn điều đó. Bạn muốn chắp thêm dữ liệu vào tệp thay vì thay thế hoàn toàn. Bạn có thể chắp thêm dữ liệu bằng phương File.AppendAllText này. Theo mặc định, File.AppendAllText thể tạo tệp nếu tệp chưa tồn tại.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");

// totals.txt
// 22385.32
// 22385.32

Mẹo

Trong ví dụ về mã trước đó, Environment.NewLine nhắc .NET đặt giá trị trên dòng riêng của nó. Nếu bạn không vượt qua giá trị này, bạn sẽ có được tất cả các số squished cùng nhau trên cùng một dòng.

Trong bài tập tiếp theo, bạn sẽ hoàn thành dự án tổng doanh thu cho Tailwind Traders bằng cách đọc tất cả các tệp bán hàng và viết tổng cuối vào một tệp .txt bạn. Sau đó, hệ thống thương mại của công ty có thể xử lý tệp.