BufferedWriter没有写入文件
我必须从用户处取得用户的姓名和地址,并将其放入文本文件中。我写了以下代码:BufferedWriter没有写入文件
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);
}
}
当我运行代码时,它从用户接收输入,但文本文件为空。地址和名称不写入文本文件。如何在上面的代码中将名称和地址存储到文本文件中。
您创建了BufferedWriter
,但从来没有flush
或close
它。
这些操作究竟写入文件
由于@ManoDestra在评论中指出,Java支持的try-with-resources
statement,它允许您格式化之类的语句:
try(BufferedWriter out = new BufferedWriter(new FileWriter(fl))) {
由于BufferedWriter
实现了接口AutoCloseable
,当try
块出口时,Java将自动处理out
的清理
@ManoDestra我从来没有真正知道尝试与资源。谢谢你今天给我一些新的东西! :) – Jeeter
不客气。现在Java 7和8中有很多好东西。我现在使用try-with-resources和自定义函数接口来允许我传递抛出异常的lambdas。检查那些也是:) – ManoDestra
到BufferedWriter将一个更简单的方法是为PrintStream:
PrintStream printer = new PrintStream(new File("filepath"));
System.setOut(printer);
然后你就可以打印任何你想要的文件,例如
printer.println(name[counter]);
,然后在年底关闭它:
printer.close();
您需要关闭流。 –
我建议使用[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)为您的流,读者,作者等设置块,以确保一切关闭并适当地冲洗。 – ManoDestra