0

我创建了一个名为“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();
}

}

4

2 回答 2

1

大多数示例程序表明您必须.flush()在. 这不应该是必需的,应该自动调用,但它不会受到伤害。此外,您还应该以相反的顺序调用所有/ objects方法,再次正确编写的类应该调用它们包装的所有对象,但无论如何这样做并没有什么坏处。BufferedWriter.close().close().flush()StreamWriter.close().close()

其他可能会在以后引起您注意的事情:

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

应该

if ("stop".equalsIgnoreCase(s))

它更高效,消除了NullPointerExceptionon的可能性s,处理任何停止的情况,最重要的是比使用更惯用的 Java.compareTo()

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

应该

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

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

于 2012-04-22T01:55:46.597 回答
-2

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

于 2012-04-22T01:56:34.290 回答