【问题标题】:Write to file in Java – BufferedWriter在 Java 中写入文件 – BufferedWriter
【发布时间】:2018-04-20 14:12:04
【问题描述】:

我创建了一个类 (LerEsceverArquivo),它读取文本文件的内容,对读取的数据进行处理,在屏幕上打印完成的处理结果并将信息写入文本文件。

屏幕数据读写正常。问题发生在文本文件中写入值的时候。

脚本仅将其写入文件的最后一条记录写入。它忽略以前的记录。它遵循问题的代码和图像。

public class LerEscreverArquivo {

    private static final String NomeArquivoEntrada = "E:\\DesafioProgramacao\\matriculasSemDV.txt";
    private static final String NomeArquivoSaida = "E:\\DesafioProgramacao\\matriculasComDV.txt";

    public static void main(String[] args) {

        FileReader     fr = null;
        BufferedReader br = null;
        BufferedWriter bw = null;
        FileWriter     fw = null;

        try {

            //input file
            fr = new FileReader(NomeArquivoEntrada);
            br = new BufferedReader(fr);

            String sCurrentLine;
            System.out.println("Início do arquivo.");

            while ((sCurrentLine = br.readLine()) != null) {

                if (!sCurrentLine.isEmpty()) {

                    int Total = 0;
                    int contador = 5;
                    int resto;

                    for (int i = 0; i < sCurrentLine.length(); i++) {

                        int j = Character.digit(sCurrentLine.charAt(i), 10);

                        Total = Total + (j * contador);
                        contador = contador - 1;
                    }

                    resto = Total / 16;
                    String decimal = Integer.toHexString(resto);
                    String DigitoCod=sCurrentLine + "-" + decimal;

                    //output file 
                    fw = new FileWriter(NomeArquivoSaida);
                    bw = new BufferedWriter(fw);
                    bw.write(DigitoCod);
                    System.out.println(DigitoCod);                  
                }
            }

            System.out.println("Fim do arquivo.");

        } catch (IOException eReader) {
            eReader.printStackTrace();
        } finally {
            try {
                if (br != null) {
                     br.close();
                }
                if (fr != null) {
                    fr.close();
                }
                if(bw != null) {
                    bw.close();
                }
                if(fw != null) {
                    fw.close();
                }
            } catch (IOException exeReader) {
                exeReader.printStackTrace();
            }
        }
    }
}

【问题讨论】:

  • 您应该使用try-with-resources。而且您不需要显式关闭您的 FileReaderFileWriter - 关闭 BufferedReaderBufferedWriter 将已经关闭它们。

标签: java file filewriter bufferedwriter


【解决方案1】:

您正在循环的每次迭代中初始化FileWriter

            fw = new FileWriter(NomeArquivoSaida);
            bw = new BufferedWriter(fw);
            bw.write(DigitoCod);

所以基本上你的文件是通过删除以前的内容重新开始的。 尝试将以下两行移到循环上方,您的问题应该得到解决。

 fw = new FileWriter(NomeArquivoSaida);
 bw = new BufferedWriter(fw);

编辑

工作代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class LerEscreverArquivo{

    private static final String NomeArquivoEntrada = "matriculasSemDV.txt";
    private static final String NomeArquivoSaida = "matriculasComDV.txt";

    public static void main(String[] args) {

        FileReader fr = null;
        BufferedReader br = null;
        BufferedWriter bw = null;
        FileWriter fw = null;
        try {

            // input file
            fr = new FileReader(NomeArquivoEntrada);
            br = new BufferedReader(fr);

            fw = new FileWriter(NomeArquivoSaida);
            bw = new BufferedWriter(fw);

            String sCurrentLine = "";
            System.out.println("Início do arquivo.");

            while ((sCurrentLine = br.readLine()) != null) {

                if (!sCurrentLine.isEmpty()) {

                    int Total = 0;
                    int contador = 5;
                    int resto;

                    for (int i = 0; i < sCurrentLine.length(); i++) {

                        int j = Character.digit(sCurrentLine.charAt(i), 10);

                        Total = Total + (j * contador);
                        contador = contador - 1;
                    }

                    resto = Total / 16;
                    String decimal = Integer.toHexString(resto);
                    String DigitoCod = sCurrentLine + "-" + decimal;

                    // output file
                    bw.write(DigitoCod);
                    System.out.println(DigitoCod);
                }
            }

            System.out.println("Fim do arquivo.");

        } catch (IOException eReader) {
            eReader.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
                if (fr != null) {
                    fr.close();
                }
                if (bw != null) {
                    bw.close();
                }
                if (fw != null) {
                    fw.close();
                }
            } catch (IOException exeReader) {
                exeReader.printStackTrace();
            }
        }
    }
}

【讨论】:

  • Md Johirul Islam,我将这些行移出循环,即使这样,脚本也只会将最后一条记录写入 txt 文件。你可以编辑代码并发给我吗?
  • Md Johirul Islam,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多