创建文件并写入文件

时间:2012-04-22 01:52:40

标签: java

我创建了一个名为'test.txt'的文件,然后从用户那里获取输入以将输入写入文件。一切都运行良好。该程序根本不显示任何错误。创建文件并且程序从用户获取输入,但是当我检查文件的内容时,它是空的。谁能弄清楚我的代码有什么问题?代码如下。

package InputOutput;

import java.io.*;

public class CharacterFileReaderAndFileWriter{

private BufferedReader br = null;
private BufferedWriter bw = null;
private PrintWriter pw = new PrintWriter(System.out, true);

public File createFile() throws IOException{
    File f = new File("test.txt");
    return f;
}

public void writeToFile() throws IOException{
    try{
        bw = new BufferedWriter(new FileWriter(createFile()));
    }
    catch(FileNotFoundException ex){
        ex.printStackTrace();
    }

    //take input from the console (user)
    br = new BufferedReader(new InputStreamReader(System.in));
    String s;

    pw.println("Please enter something");
    pw.println("To stop the program, enter 'stop'");

    do{
        s = br.readLine();
        if(s.compareTo("stop")==0)
            break;
        s+= "\r\n";//adding an new line to the string s         
        bw.write(s);            
    }
    while(s.compareTo("stop")!=0);

    br.close();
    bw.close();

}

public static void main(String[] args) throws IOException{

    CharacterFileReaderAndFileWriter cfr = new CharacterFileReaderAndFileWriter();
    cfr.writeToFile();
}

}

2 个答案:

答案 0 :(得分:1)

大多数示例程序都显示您必须在.flush()之前的BufferedWriter上致电.close()。这不应该是必需的,.close()应该自动调用.flush(),但它不会受到伤害。此外,您应该以相反的顺序调用所有Stream / Writer对象.close()方法,再次正确编写的类应该在它们包装的所有对象上调用.close(),但它无论如何都不会伤害它。

其他可能会在以后发现的事情:

if(s.compareTo("stop")==0)

应该是

if ("stop".equalsIgnoreCase(s))

效率更高,消除NullPointerExceptions的可能性,处理 stop 的任何情况,最重要的是比使用.compareTo()更惯用的Java

    s+= "\r\n";//adding an new line to the string s         
    bw.write(s);        

应该是

    bw.write(System.getProperty("line.separator"));        
    bw.write(s);        

s+=创建需要收集的中间对象和垃圾。硬编码行结尾也很糟糕。

答案 1 :(得分:-2)

您需要关闭输出流。 file.close();