【问题标题】:BufferedWriter isnt writing to fileBufferedWriter 不写入文件
【发布时间】:2016-08-15 18:32:50
【问题描述】:

我必须从用户那里获取用户的姓名和地址并将其放入文本文件中。我写了以下代码:

package selfTest.nameAndAddress;

import com.intellij.codeInsight.template.postfix.templates.SoutPostfixTemplate;

import java.io.*;
import java.util.Arrays;

/**
 * Created by 
 */
public class Test {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr=new InputStreamReader(System.in);
        BufferedReader br=new BufferedReader(isr);


        //creating addressbook text file
        File fl=new File("E:/addressbook.txt");
        fl.createNewFile();

        FileReader fr=new FileReader(fl);
        BufferedReader in=new BufferedReader(fr);



        boolean eof=false;
        int inChar=0;

        String[] name=new String[2];
        String[] address=new String[2];

        int counter=0;


        do{
            FileWriter fw=new FileWriter(fl);
            BufferedWriter out=new BufferedWriter(fw);

            System.out.println("Enter "+(counter+1)+" students name "+" and address");

            name[counter]=br.readLine();
            address[counter]=br.readLine();

            out.write(name[counter]);
            System.out.println("Nmae: "+name[counter]+" ddress: "+address[counter]);
            counter++;
        }while(counter<2);
    }
}

当我运行代码时,它接受用户的输入,但文本文件是空的。地址和名称不会写入文本文件。如何将名称和地址存储到上述代码中的文本文件中。

【问题讨论】:

  • 你需要关闭流。
  • 我建议为您的流、读取器、写入器等使用 try-with-resources 块,以确保正确关闭和刷新所有内容。

标签: java bufferedwriter


【解决方案1】:

您创建了BufferedWriter,但从未创建flushclose

这些操作是实际写入文件的内容


正如@ManoDestra 在 cmets 中指出的那样,Java 支持 try-with-resources statement,它允许您将语句格式化为:

try(BufferedWriter out = new BufferedWriter(new FileWriter(fl))) {

由于BufferedWriter 实现了AutoCloseable 接口,当try 块退出时,Java 将自动清理out

【讨论】:

  • @ManoDestra 我从来不知道 try-with-resources。谢谢你今天教我一些新东西! :)
  • 不客气。现在 Java 7 和 8 中有很多好东西。我现在经常使用 try-with-resources 和自定义功能接口来允许我传递引发异常的 lambda。也检查一下:)
【解决方案2】:

BufferedWriter 的一个更简单的替代方案是 PrintStream:

PrintStream printer = new PrintStream(new File("filepath"));
System.setOut(printer);

然后你可以打印任何你想要的文件,例如

printer.println(name[counter]);

然后在最后关闭:

printer.close();

【讨论】:

  • 我不知道这是否真的是一个解决方案。 OP 想知道为什么文件没有被写入,而您却提议完全更改他的代码而没有说明原因
  • @Jeeter 哦,对不起,我是新来的。我看到了您的回复,我只是想提出一个替代方案以供将来参考。
  • 我怎么没见过System.setOut...你为什么不在那之后使用System.out
  • @4castle 您可以在System.setOut 之后使用System.out.printprinter.print。我只是多余地把它放在两个地方,以防我忘记并在不应该的时候使用System.out
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多