Preciso de um auxílio em relação a essa função abaixo. A estrutura dela se encontra em um arquivo Funcoes.java.
Ela adiciona um espaçamento entre os dados no momento de gerar o arquivo txt, o arquivo txt gerado tem 28 mil linhas de produtos de uma base do Governo.
public static String AdicionaEspaco(String reg, String formato, int tamanho) {
String result = reg.trim().replace(" ", "");
String caractere = "";
if (result.length() < tamanho) {
while (result.length() < tamanho) {
if (formato.equals("E")) {
caractere = " ";
result = caractere + result;
} else if (formato.equals("D")) {
caractere = " ";
result = result + caractere;
}
}
} else {
result = result.substring(0, tamanho);
}
return result;
}
Logo abaixo é onde a função acima está sendo aplicada dentro da função que estrutura e gera o arquivo txt.
private void gerar() throws Exception {
if (podeGerar()) {
File fileTXT = new File(".\\arquivo\\LC_PHARMA_" + jcb_icms.getSelectedItem() + ".txt");
fileTXT.delete();
FileWriter arq = new FileWriter(fileTXT, true);
PrintWriter gravarArq = new PrintWriter(fileTXT, "ISO-8859-1");
listaProduto.clear();
listaProduto = (ArrayList<Produto>) new ProdutoDAO().listaProdutoBarras("%%");
String escreva;
double preco_venda = 0;
double preco_custo = 0;
double aliq_icms = 0;
ProdutoPrecoDAO precoDao = new ProdutoPrecoDAO();
for (Produto p : listaProduto) {
ProdutoPreco prodPreco = precoDao.getProdutoPreco(p, listaVersao.get(jcb_versao.getSelectedIndex() - 1));
if (prodPreco.getId_produto() > 0) {
if (p.getIcms_0().equals("Sim")) {
preco_custo = prodPreco.getPrecocusto_0();
preco_venda = prodPreco.getPrecovenda_0();
aliq_icms = 0;
} else if (jcb_icms.getSelectedItem().equals("12%")) {
preco_custo = prodPreco.getPrecocusto_12();
preco_venda = prodPreco.getPrecovenda_12();
aliq_icms = 12;
} else if (jcb_icms.getSelectedItem().equals("17%")) {
preco_custo = prodPreco.getPrecocusto_17();
preco_venda = prodPreco.getPrecovenda_17();
aliq_icms = 17;
} else if (jcb_icms.getSelectedItem().equals("17,5%")) {
preco_custo = prodPreco.getPrecocusto_17_5();
preco_venda = prodPreco.getPrecovenda_17_5();
aliq_icms = 17.5;
} else if (jcb_icms.getSelectedItem().equals("18%")) {
preco_custo = prodPreco.getPrecocusto_18();
preco_venda = prodPreco.getPrecovenda_18();
aliq_icms = 18;
} else if (jcb_icms.getSelectedItem().equals("19%")) {
preco_custo = prodPreco.getPrecocusto_19();
preco_venda = prodPreco.getPrecovenda_19();
aliq_icms = 19;
} else if (jcb_icms.getSelectedItem().equals("20%")) {
preco_custo = prodPreco.getPrecocusto_20();
preco_venda = prodPreco.getPrecovenda_20();
aliq_icms = 20;
} else if (jcb_icms.getSelectedItem().equals("21%")) {
preco_custo = prodPreco.getPrecocusto_21();
preco_venda = prodPreco.getPrecovenda_21();
aliq_icms = 21;
} else if (jcb_icms.getSelectedItem().equals("22%")) {
preco_custo = prodPreco.getPrecocusto_22();
preco_venda = prodPreco.getPrecovenda_22();
aliq_icms = 22;
} else if (jcb_icms.getSelectedItem().equals("17% (ALC)")) {
preco_custo = prodPreco.getPrecocusto_17_alc();
preco_venda = prodPreco.getPrecovenda_17_alc();
aliq_icms = 17;
} else if (jcb_icms.getSelectedItem().equals("17,5% (ALC)")) {
preco_custo = prodPreco.getPrecocusto_17_5_alc();
preco_venda = prodPreco.getPrecovenda_17_5_alc();
aliq_icms = 17.5;
} else if (jcb_icms.getSelectedItem().equals("18% (ALC)")) {
preco_custo = prodPreco.getPrecocusto_18_alc();
preco_venda = prodPreco.getPrecovenda_18_alc();
aliq_icms = 18;
}
escreva = Funcoes.AdicionaEspaco("" + Funcoes.formatoInteiro4Digitos(listaVersao.get(jcb_versao.getSelectedIndex() - 1).getId()), "D", 6).toUpperCase()
+ Funcoes.AdicionaEspaco(listaVersao.get(jcb_versao.getSelectedIndex() - 1).getData_vigencia().replaceAll("\\D", ""), "D", 10).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getCodigo_ggrem(), "D", 17).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getRegistro(), "D", 15).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getEan1(), "D", 16).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getEan2(), "D", 16).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getEan3(), "D", 16).toUpperCase()
+ Funcoes.AdicionaEspaco("" + p.getId(), "D", 13).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getProduto(), "D", 200).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getSubstancia(), "D", 600).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getApresentacao(), "D", 200).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getClasse_terapeutica(), "D", 200).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getCategoria().getNome() == null ? "" : p.getCategoria().getNome(), "D", 50).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getFabricante().getNome() == null ? "" : p.getFabricante().getNome(), "D", 120).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getTarja(), "D", 100).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getRegime_preco(), "D", 30).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getLista(), "D", 30).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getRestricao_hospitalar(), "D", 5).toUpperCase()
+ Funcoes.AdicionaEspaco(p.getIcms_0(), "D", 5).toUpperCase()
+ Funcoes.AdicionaEspaco("" + aliq_icms, "E", 12)
+ Funcoes.AdicionaEspaco("" + preco_custo, "E", 12)
+ Funcoes.AdicionaEspaco("" + preco_venda, "E", 12)
+ Funcoes.AdicionaEspaco(prodPreco.getAtualizar().equals("S") ? "Sim" : "Nao", "E", 4).toUpperCase();
System.out.println(prodPreco.getId_produto());
gravarArq.println(Funcoes.removeAcentos(escreva));
}
}
gravarArq.flush();
gravarArq.close();
JOptionPane.showMessageDialog(null, "Arquivo gerado com sucesso!");
}
}
O tempo de geração do arquivo está por volta de 25 a 35 minutos. E ele fica com 46MB quando gerado por completo. Preciso otimizar ou a função de gerar o arquivo ou a que adiciona o espaçamento. Alguém tem alguma idéia. Desde já muito grato!