Java BufferedWriter未写入文件

Java BufferedWriter未写入文件,java,bufferedwriter,Java,Bufferedwriter,我必须从用户那个里获取用户的姓名和地址,并将其放入文本文件中。我编写以下代码: package selfTest.nameAndAddress; import com.intellij.codeInsight.template.postfix.templates.SoutPostfixTemplate; import java.io.*; import java.util.Arrays; /** * Created by */ public class Test { publ

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

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);
    }
}
package selfTest.name和address;
导入com.intellij.codeInsight.template.postfix.templates.SoutPostfixTemplate;
导入java.io.*;
导入java.util.array;
/**
*创建人
*/
公开课考试{
公共静态void main(字符串[]args)引发IOException{
InputStreamReader isr=新的InputStreamReader(System.in);
BufferedReader br=新的BufferedReader(isr);
//创建地址簿文本文件
文件fl=新文件(“E:/addressbook.txt”);
fl.createNewFile();
FileReader fr=新的FileReader(fl);
BufferedReader in=新的BufferedReader(fr);
布尔eof=假;
int英寸=0;
字符串[]名称=新字符串[2];
字符串[]地址=新字符串[2];
int计数器=0;
做{
FileWriter fw=新的FileWriter(fl);
BufferedWriter out=新的BufferedWriter(fw);
System.out.println(“输入”+(计数器+1)+“学生姓名”+“和地址”);
名称[计数器]=br.readLine();
地址[计数器]=br.readLine();
填写(姓名[柜台]);
System.out.println(“Nmae:+名称[计数器]+”地址:+地址[计数器]);
计数器++;

}虽然(计数器)创建了
BufferedWriter
,但从未创建它

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


正如@ManoDestra在评论中指出的,Java支持,这允许您将语句格式化为:

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

由于
BufferedWriter
实现了该接口,当
try
块退出时,Java将自动清理
out
,BufferedWriter的一个更简单的替代方法是PrintStream:

PrintStream printer = new PrintStream(new File("filepath"));
System.setOut(printer);
然后你可以把你想要的任何东西打印到文件中,例如

printer.println(name[counter]);
然后在末尾将其关闭:

printer.close();

您需要关闭流。我建议您对流、读卡器、写卡器等使用块,以确保所有内容都已正确关闭和刷新。@Manodesra我从未真正了解过“使用资源进行尝试”。感谢您今天教我一些新东西!:)不客气。现在Java 7和8中有很多好东西。我使用try with resources now和自定义函数接口,允许我传递引发异常的lambda。也检查一下:)我不知道这是否真的是一个解决方案。OP想知道为什么文件没有被写入,而你建议用胡说why@Jeeter哦,对不起,我是新来的。我看到了你的回答,我只是想建议一个供将来参考的替代方案。我怎么从来没有见过
System.settout
…为什么你不在那之后使用
System.out
?@4castle你可以使用
System.out.print
printer.print
System.settout
.我只是冗余地把它放在两个方面,以防我忘记并在不应该的时候使用
System.out