Ler arquivos e fazer gravação neles
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.