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

如何使用java在文件中写入输入文本,java,file,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.IOExc

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

这是我的密码:

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")));

    }
}
有人有办法解决这个问题吗?请帮忙。。
提前感谢

写入后需要关闭或刷新写入程序

尝试:

编辑:好的,我按照建议刷新了。


但是您仍然需要调用
bw.close()完成编写器后。关闭写入程序将自动刷新它。

您需要在写入后关闭或刷新写入程序

尝试:

编辑:好的,我按照建议刷新了。


但是您仍然需要调用
bw.close()完成编写器后。关闭写入程序将自动刷新它。

看起来您没有刷新缓冲写入程序,这可能是一个问题


您也从不关闭BufferedWriter,这也很有帮助,因为BufferedWriter在关闭过程中会自动刷新。

看起来您没有刷新BufferedWriter,这可能是一个问题

您也从不关闭BufferedWriter,这也很有帮助,因为BufferedWriter在关闭过程中会自动刷新。

您需要
flush()
close()
文件写入程序(关闭它也会刷新它)

试试这个:

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
您需要
flush()
close()
文件写入程序(关闭它也会刷新它)

试试这个:

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

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

其次,
Writer
应该始终关闭,这样就可以再次释放所有使用过的资源。
close()
操作将在关闭前自动刷新缓冲区中剩余的所有字符。(请注意,对于不缓冲
flush()
方法的写入程序,通常不会执行任何操作)

这就是代码中的基本错误:由于没有刷新或关闭
BufferedWriter
,并且可能向文件中写入的字符数少于缓冲区大小,因此输出只保留在缓冲区中

您的代码中似乎存在其他一些错误(不会立即导致您报告的问题)

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

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

其次,
Writer
应该始终关闭,这样就可以再次释放所有使用过的资源。
close()
操作将在关闭前自动刷新缓冲区中剩余的所有字符。(请注意,对于不缓冲
flush()
方法的写入程序,通常不会执行任何操作)

这就是代码中的基本错误:由于没有刷新或关闭
BufferedWriter
,并且可能向文件中写入的字符数少于缓冲区大小,因此输出只保留在缓冲区中

您的代码中似乎存在其他一些错误(不会立即导致您报告的问题)

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

您还应该在循环开始之前创建并打开filewriter,然后在循环完成后将其关闭。关闭应该在finally块中,或者您应该使用try with resources结构。您还应该在循环开始之前创建并打开filewriter,然后在循环完成后关闭它。关闭应该在finally块中,或者应该使用try with resources结构