Ler arquivos e fazer gravação neles

Concluído

Ler dados de arquivos e gravar dados em arquivos são conceitos fundamentais do .NET.

A Tailwind Traders precisa gravar o total de todos os arquivos de vendas individuais do repositório em um novo arquivo e carregar o arquivo no sistema de vendas da empresa.

Aqui você aprenderá a usar a classe File para ler e gravar nos arquivos.

Ler dados de arquivos

Os arquivos são lidos usando o método ReadAllText da classe File.

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

O objeto de retorno de ReadAllText é uma cadeia de caracteres.

{
  "total": 22385.32
}

Analisar dados em arquivos

Esses dados no formato de cadeia de caracteres não são muito bons. Ainda são apenas caracteres, mas agora em um formato que você pode ler. O que você quer é a capacidade de analisar esses dados em um formato que você possa usar de maneira programática.

Há várias maneiras de analisar arquivos JSON com o .NET, incluindo uma biblioteca da comunidade conhecida como Json.NET.

Você pode adicionar o pacote Json.NET ao projeto usando o NuGet:

dotnet add package Newtonsoft.Json

Em seguida, adicione using Newtonsoft.Json ao início do arquivo de classe:

using Newtonsoft.Json; 

Além disso, use o método 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; }
}

Dica

Os arquivos são fornecidos em vários formatos. O arquivo mais desejável com o qual trabalhar é o JSON, devido ao suporte interno na linguagem. Você também pode encontrar arquivos .csv, de largura fixa ou em algum outro formato. Nesse caso, é melhor pesquisar um analisador para esse tipo de arquivo em nuget.org.

Gravar dados em arquivos

Você aprendeu a escrever arquivos no exercício anterior; é que você escreveu um vazio. Para gravar dados em um arquivo, use o mesmo método WriteAllText, mas passe os dados que deseja gravar.

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

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

// totals.txt
// 22385.32

Acrescentar dados em arquivos

No exemplo anterior, o arquivo é substituído sempre que você faz uma gravação nele. Às vezes, você não deseja isso. Deseja acrescentar dados ao arquivo, em vez de substituí-los totalmente. Você pode acrescentar dados com o método File.AppendAllText. Por padrão, File.AppendAllText criará o arquivo se ele ainda não existir.

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

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

// totals.txt
// 22385.32
// 22385.32

Dica

No exemplo de código acima, Environment.NewLine solicita ao .NET para colocar o valor em uma linha própria. Se você não passasse esse valor, todos os números seriam agrupados na mesma linha.

No próximo exercício, você concluirá o projeto de totais de vendas da Tailwind Traders lendo todos os arquivos de vendas e gravando o total geral em um arquivo .txt. Em seguida, o sistema comercial da empresa poderá processar o arquivo.