【问题标题】:Buffered Reader/Writer flushes files缓冲读取器/写入器刷新文件
【发布时间】:2013-12-12 04:59:58
【问题描述】:

我正在尝试创建一种方法,用给定的值替换文件中的每一行。相反,它只是使文件为空。关心看看,看看发生了什么?谢谢。

try {

            FileReader fr = new FileReader(chooser.getSelectedFile());
            BufferedReader reader = new BufferedReader(fr);
            FileWriter fw = new FileWriter(chooser.getSelectedFile());
            BufferedWriter bw = new BufferedWriter(fw);
            String line = reader.readLine();
            Scanner scan = null;
            int i=0;
            while (line != null) {
                scan = new Scanner(line);
                ln = scan.toString() + add;
                bw.write(ln);
                bw.newLine();
                i++;
                System.out.println(i + " pass");
                line = reader.readLine();
            }
            reader.close();
            bw.close();
        } catch (FileNotFoundException e) {
            System.out.println("Can't find the file");
        } catch (IOException e) {
            System.out.println("Dude, it's impossibru to read.");
        }

这个方法中的i也是看程序经过了多少次while循环,本例为0,根本不启动while循环。

【问题讨论】:

  • 可能无法回答您的确切问题,但为什么不只计算文件中的行数并用新行覆盖文件?
  • 您正在尝试 readwrite 到同一个文件。而是创建新文件并编写替换文本。
  • noMAD,未来它会发展,所以我正在以“艰难的方式”来做这件事。 Smit,这可能是一个好点,但是没有办法在 1 个文件中做到这一点吗?
  • 你对Scanner的使用让我着迷。让Scanner 读取源文件本身而不是每行创建一个新文件要简单得多,但无论如何,在上面调用toString() 有什么意义?为什么要在文件中以未指定的格式存储“information that may be useful for debugging”
  • @VitalijKornijenko 如果您不想要实际文件,则可以删除该文件。如果您仍然想坚持将所有内容都放在一个文件中的想法,那么请读取所有内容并将其存储在某个地方,最好是存储到ArrayList,替换您的内容并将其写入文件。

标签: java file flush writer


【解决方案1】:

如果你想用你的新行覆盖同一个文件,你应该先读,然后写。

ArrayList<String> lines = new ArrayList<String>();

//start reader, go over each line

while (line != null) {
    String newLine = //make changes to line
    lines.add(newLine);
}

//close reader
//start writer
//write each line to file

【讨论】:

    【解决方案2】:

    您以替换模式打开文件,您的FileWriter 将在写入第一行之前清空文件。如果要追加,请使用 FileWriter(file,true)。

    第二个问题是你同时阅读和写作。尝试下一个序列:

    1. 读取整个文件
    2. 替换所有行
    3. 写入(替换旧文件)

    这样你就可以最大限度地减少问题数量

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多