Java - Read file and Write output to . txt

Asked

Viewed 671 times

1

I have an application to read a file. txt and seal specific columns and generate in the format I need, the application works, but the result is generated in the Netbeans console, then I copy the content, open Notepad++ and colo, and then I save the file, I wanted the application to do it automatically, I can already take file path and generate write path, but the generated file comes out with only 1 line, the rest it ignores. the code below is the Generate button, where it reads the file I selected, applies the defined rules and generates the file NOTE: In the console everything goes OK, recording problem that only generates 1 line.

String arquivoFinal = tflocaldestino.getText();

    // Definição de espaços em Branco a ser gerado apos cada coluna obtida no arquivo original
    int espacoaposcampo01 = Integer.parseInt(tfespacoscampo01.getText());
    String espacoaposcampo_01_def = "";
    for (int aux = 0; aux < espacoaposcampo01; aux++) {
        espacoaposcampo_01_def += " ";
    }
    int espacoaposcampo02 = Integer.parseInt(tfespacoscampo02.getText());
    String espacoaposcampo_02_def = "";
    for (int aux = 0; aux < espacoaposcampo02; aux++) {
        espacoaposcampo_02_def += " ";
    }
    int espacoaposcampo03 = Integer.parseInt(tfespacoscampo03.getText());
    String espacoaposcampo_03_def = "";
    for (int aux = 0; aux < espacoaposcampo03; aux++) {
        espacoaposcampo_03_def += " ";
    }
    int espacoaposcampo04 = Integer.parseInt(tfespacoscampo04.getText());
    String espacoaposcampo_04_def = "";
    for (int aux = 0; aux < espacoaposcampo04; aux++) {
        espacoaposcampo_04_def += " ";
    }
    int espacoaposcampo05 = Integer.parseInt(tfespacoscampo05.getText());
    String espacoaposcampo_05_def = "";
    for (int aux = 0; aux < espacoaposcampo05; aux++) {
        espacoaposcampo_05_def += " ";
    }
    int espacoaposcampo06 = Integer.parseInt(tfespacoscampo06.getText());
    String espacoaposcampo_06_def = "";
    for (int aux = 0; aux < espacoaposcampo06; aux++) {
        espacoaposcampo_06_def += " ";
    }
    int espacoaposcampo07 = Integer.parseInt(tfespacoscampo07.getText());
    String espacoaposcampo_07_def = "";
    for (int aux = 0; aux < espacoaposcampo07; aux++) {
        espacoaposcampo_07_def += " ";
    }
    int espacoaposcampo08 = Integer.parseInt(tfespacoscampo08.getText());
    String espacoaposcampo_08_def = "";
    for (int aux = 0; aux < espacoaposcampo08; aux++) {
        espacoaposcampo_08_def += " ";
    }
    int espacoaposcampo09 = Integer.parseInt(tfespacoscampo09.getText());
    String espacoaposcampo_09_def = "";
    for (int aux = 0; aux < espacoaposcampo09; aux++) {
        espacoaposcampo_09_def += " ";
    }

    // Define Dados Fixos Personalizados, e espaços se houver
    String dadosfixo01 = tfdadosfixo01.getText();
    int espacofixo01 = Integer.parseInt(tfespacofixo01.getText());
    String espacosfixo01_def = "";
    for (int aux = 0; aux < espacofixo01; aux++) {
        espacosfixo01_def += " ";
    }
    String dadosfixo02 = tfdadosfixo02.getText();
    int espacofixo02 = Integer.parseInt(tfespacofixo02.getText());
    String espacosfixo02_def = "";
    for (int aux = 0; aux < espacofixo02; aux++) {
        espacosfixo02_def += " ";
    }
    String dadosfixo03 = tfdadosfixo03.getText();
    int espacofixo03 = Integer.parseInt(tfespacofixo03.getText());
    String espacosfixo03_def = "";
    for (int aux = 0; aux < espacofixo03; aux++) {
        espacosfixo03_def += " ";
    }
    String dadosfixo04 = tfdadosfixo04.getText();
    int espacofixo04 = Integer.parseInt(tfespacofixo04.getText());
    String espacosfixo04_def = "";
    for (int aux = 0; aux < espacofixo04; aux++) {
        espacosfixo04_def += " ";
    }
    String dadosfixo05 = tfdadosfixo05.getText();
    int espacofixo05 = Integer.parseInt(tfespacofixo05.getText());
    String espacosfixo05_def = "";
    for (int aux = 0; aux < espacofixo05; aux++) {
        espacosfixo05_def += " ";
    }
    String dadosfixo06 = tfdadosfixo06.getText();
    int espacofixo06 = Integer.parseInt(tfespacofixo06.getText());
    String espacosfixo06_def = "";
    for (int aux = 0; aux < espacofixo06; aux++) {
        espacosfixo06_def += " ";
    }

    // Pegando caminho do Arquivo original
    FileInputStream stream;
    try {
        stream = new FileInputStream(tflocalorigem.getText());
        InputStreamReader reader = new InputStreamReader(stream);
        BufferedReader br = new BufferedReader(reader);

        // Lê linhas do Arquivo de acordo com colunas selecionadas de (inicio e fim)
        String linha = br.readLine();
        while (linha != null) {
            String campo01 = linha.substring(Integer.parseInt(tfcol01inicio.getText()), Integer.parseInt(tfcol01fim.getText()));
            String campo02 = linha.substring(Integer.parseInt(tfcol02inicio.getText()), Integer.parseInt(tfcol02fim.getText()));
            String campo03 = linha.substring(Integer.parseInt(tfcol03inicio.getText()), Integer.parseInt(tfcol03fim.getText()));
            String campo04 = linha.substring(Integer.parseInt(tfcol04inicio.getText()), Integer.parseInt(tfcol04fim.getText()));
            String campo05 = linha.substring(Integer.parseInt(tfcol05inicio.getText()), Integer.parseInt(tfcol05fim.getText()));
            String campo06 = linha.substring(Integer.parseInt(tfcol06inicio.getText()), Integer.parseInt(tfcol06fim.getText()));
            String campo07 = linha.substring(Integer.parseInt(tfcol07inicio.getText()), Integer.parseInt(tfcol07fim.getText()));
            String campo08 = linha.substring(Integer.parseInt(tfcol08inicio.getText()), Integer.parseInt(tfcol08fim.getText()));
            String campo09 = linha.substring(Integer.parseInt(tfcol09inicio.getText()), Integer.parseInt(tfcol09fim.getText()));

            String caixaaltacompo04 = campo04.toUpperCase(); // Transforma Texto de Caixa Baixa para Caixa Alta
            campo04 = caixaaltacompo04; //  campo04 recebe o Texto em Caixa Alta 




            System.out.println(dadosfixo01 + espacosfixo01_def
                    + dadosfixo02 + espacosfixo02_def
                    + campo01 + espacoaposcampo_01_def
                    + campo02 + espacoaposcampo_02_def
                    + campo03 + espacoaposcampo_03_def
                    + dadosfixo03 + espacosfixo03_def
                    + campo04 + espacoaposcampo_04_def
                    + dadosfixo04 + espacosfixo04_def
                    + dadosfixo05 + espacosfixo05_def
                    + campo05 + espacoaposcampo_05_def);
            linha = br.readLine(); // Pula a linha


            File file = new File(caminhoDestino);
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));

    writer.write(dadosfixo01 + espacosfixo01_def
                    + dadosfixo02 + espacosfixo02_def
                    + campo01 + espacoaposcampo_01_def
                    + campo02 + espacoaposcampo_02_def
                    + campo03 + espacoaposcampo_03_def
                    + dadosfixo03 + espacosfixo03_def
                    + campo04 + espacoaposcampo_04_def
                    + dadosfixo04 + espacosfixo04_def
                    + dadosfixo05 + espacosfixo05_def
                    + campo05 + espacoaposcampo_05_def);
    writer.newLine();
    //Criando o conteúdo do arquivo
    writer.flush();
            //Fechando conexão e escrita do arquivo.
    writer.close();


        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, "Arquivo não encontrado, Verefique o caminho e tente novamente");
    } catch (IOException ex) {
        Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
    }


}

inserir a descrição da imagem aqui

1 answer

1


You are creating the file within the loop while. This causes each iteration to create a new file and overwrite the previous one. To resolve the problem, just move the file startup and the closure out of the loop:

Instead of:

// Pegando caminho do Arquivo original
FileInputStream stream;
try {
    //Código omitido
    while (linha != null) {
        //Código omitido

        File file = new File(caminhoDestino);
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));

        writer.write(dadosfixo01 + espacosfixo01_def
                + dadosfixo02 + espacosfixo02_def
                + campo01 + espacoaposcampo_01_def
                + campo02 + espacoaposcampo_02_def
                + campo03 + espacoaposcampo_03_def
                + dadosfixo03 + espacosfixo03_def
                + campo04 + espacoaposcampo_04_def
                + dadosfixo04 + espacosfixo04_def
                + dadosfixo05 + espacosfixo05_def
                + campo05 + espacoaposcampo_05_def);
        writer.newLine();
        writer.flush();
        writer.close();
    }
} catch (FileNotFoundException ex) {
    Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
    JOptionPane.showMessageDialog(null, "Arquivo não encontrado, Verefique o caminho e tente novamente");
} catch (IOException ex) {
    Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
}

Do it:

// Pegando caminho do Arquivo original
FileInputStream stream;

try {
    File file = new File(caminhoDestino);
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    //Código omitido
    while (linha != null) {
        //Código omitido

        writer.write(dadosfixo01 + espacosfixo01_def
                + dadosfixo02 + espacosfixo02_def
                + campo01 + espacoaposcampo_01_def
                + campo02 + espacoaposcampo_02_def
                + campo03 + espacoaposcampo_03_def
                + dadosfixo03 + espacosfixo03_def
                + campo04 + espacoaposcampo_04_def
                + dadosfixo04 + espacosfixo04_def
                + dadosfixo05 + espacosfixo05_def
                + campo05 + espacoaposcampo_05_def);
        writer.newLine();
        writer.flush();
    }
    writer.close();
} catch (FileNotFoundException ex) {
    Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
    JOptionPane.showMessageDialog(null, "Arquivo não encontrado, Verefique o caminho e tente novamente");
} catch (IOException ex) {
    Logger.getLogger(txt2Folha.class.getName()).log(Level.SEVERE, null, ex);
}

Also, I suggest you take a look at Try-with-Resources, since it is the most recommended way to close resources.

  • It worked here, now created the file . txt, Thank you. I have one more question, the final file that I will use in another application, does not allow to have blank lines at the end of the file, and in the recording it creates 1 extra line at the end blank, has some way to delete the last or not generate that blank line without having to enter the file and delete manually?

  • @Alexbasto Put your writer.newLine(); within a if(linha != null), example: if(linha != null){writer.newLine();}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.