Olá. Penso que não deveríamos ter que alterar código, recompilar e fazer deploy, caso solicitem a mudança do formato de um dos campos de um arquivo.
Estou aprendendo ainda, já vi os outros posts dos coletas neste forum, sobre que há outras maneiras de guardar configurações, etc, sobre o properties estar defasado, obrigado pelos posts, mas este não é o ponto.
Fiz um esboço do que seria não ter que recomplidar e fazer deploy para o cenário acima mencionado, é só um esboço mesmo, deve haver forma melhor, mas gostaria de saber se fazer isso, separar a formatação, é boa prática, e se em algum curso veremos forma mais prática e moderna de fazer isso.
package br.com.alura.java.io.teste;
import java.io.File;
import java.io.FileReader;
import java.util.Locale;
import java.util.Properties;
import java.util.Scanner;
public class TesteGravacaoProperties {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
// executei uma so vez para testar os comandos e gravar o arquivo, depois comentei
// props.setProperty("stringFormatacaoTipoConta", "%s");
// props.setProperty("stringFormatacaoAgencia", "%04d");
// props.setProperty("stringFormatacaoNumeroConta", "%08d");
// props.setProperty("stringFormatacaoTitular", "%-30s");
// props.setProperty("stringFormatacaoSaldo", "%,010.2f");
// props.store(new FileWriter("conf.properties"), "configuracoes de formatacao de colunas do relatorio mantidas fora do codigo foonte");
props.load(new FileReader("conf.properties"));
String formatacaoTipoConta = props.getProperty("stringFormatacaoTipoConta");
String formatacaoAgencia = props.getProperty("stringFormatacaoAgencia");
String formatacaoNumeroConta = props.getProperty("stringFormatacaoNumeroConta");
String formatacaoTitular = props.getProperty("stringFormatacaoTitular");
String formatacaoSaldo = props.getProperty("stringFormatacaoSaldo");
Scanner scn = new Scanner(new File("conta.csv"));
while ( scn.hasNextLine() ) {
String linha = scn.nextLine();
Scanner linhaScanner = new Scanner(linha);
linhaScanner.useLocale(Locale.US);
linhaScanner.useDelimiter(",");
String tipoConta = linhaScanner.next();
int agencia = linhaScanner.nextInt();
int numeroConta = linhaScanner.nextInt();
String nomeTitular = linhaScanner.next();
double saldo = linhaScanner.nextDouble();
String stringFormatacao = String.format("Linha formatada : %s - %s-%s, %s: %s%n", formatacaoTipoConta, formatacaoAgencia, formatacaoNumeroConta, formatacaoTitular, formatacaoSaldo);
System.out.format(new Locale("pt", "BR"), stringFormatacao, tipoConta, agencia, numeroConta, nomeTitular, saldo);
linhaScanner.close();
}
scn.close();
}
}