如何使用java在文件中写入输入文本

时间:2014-09-01 15:01:41

标签: java file

我正在尝试编写一个用于从控制台获取输入的代码。输入文本将保存在特定文件中。我的代码完美地获得了控制台输入&也创建一个文件,但控制台输入不保存到文件。

这是我的代码:

package com.mahbub.file_object;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Scanner;

public class ConsoleInput {

    public static void main (String [] args) throws IOException{
        BufferedReader br=null;
        BufferedWriter bw=null;

        File file=new File("D:/test1.txt");



        Reader reader=new InputStreamReader(System.in);
        br =new BufferedReader(reader);
        String str=null;

        do{
            System.out.println("Enter 'q' for quit!!");
            str=br.readLine();
            FileWriter fw=new FileWriter(file,true);
            bw=new BufferedWriter(fw);
            bw.write(str);
            System.out.println(str);
        }while(!(str.equalsIgnoreCase("q")));

    }
}

任何人都有任何想法解决这个问题?请帮忙.. 谢谢高级。!!

4 个答案:

答案 0 :(得分:3)

你需要在写完后关闭或冲洗作家;

尝试:

System.out.println("Enter 'q' for quit!!");
        str=br.readLine();
        FileWriter fw=new FileWriter(file,true);
        bw=new BufferedWriter(fw);
        bw.write(str);
        bw.flush();//You are Missing this
        System.out.println(str);

编辑:好的,我按照建议进行了冲洗。

但是在完成作者之后,你仍然需要调用bw.close();。关闭Writer会自动刷新它。

答案 1 :(得分:1)

您需要flush()close() FileWriter(关闭它也会刷新它)。

试试这个:

do {
    System.out.println("Enter 'q' for quit!!");
    str=br.readLine();
    FileWriter fw=new FileWriter(file,true);
    bw=new BufferedWriter(fw);
    bw.write(str);
    bw.flush();    //do this , you missed it
    System.out.println(str);
}
while(!(str.equalsIgnoreCase("q")));

bw.close();     //do this , you missed it

答案 2 :(得分:0)

看起来你没有冲洗你的BufferedWriter,这可能是一个问题。

你也永远不会关闭BufferedWriter,这也有帮助,因为BufferedWriter在关闭过程中会自行刷新。

答案 3 :(得分:0)

BufferedWriter将输出缓冲在字符缓冲区中,而不是立即将字符发送到基础Writer(在这种情况下为FileWriter)。这是一种很好的做法,因为它减少了可能代价高昂的写入次数。当缓冲区已满或者显式调用flush()时,字符将被发送到基础Writer。

其次应始终关闭Writer,以便可以再次释放所有已使用的资源。 close()操作将在关闭之前自动清除缓冲区中剩余的所有字符。 (请注意,对于不缓冲flush()方法的编写器通常不执行任何操作)

这基本上是你的代码出错:因为你没有刷新或关闭BufferedWriter,并且可能写的文件少于缓冲区大小,你的输出只是保留在缓冲区中。 / p>

您的代码中似乎有些其他问题(不会立即导致您报告的问题)

  • 为每个要写的字符串创建一个新的FileWriter。通常,您只使用循环前声明的一个FileWriter。由于您在覆盖模式下创建了Writer,因此每个String都会覆盖之前的内容。
  • 如果文件test1.txt不存在,则此代码在尝试创建FileNotFoundException时会抛出FileWriter
  • 使用字符串“q”作为标记来停止添加到文件,但在检查终止条件之前,您将“q”写入文件。我猜这不是意图。