如何使用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”写入文件。我想这不是目的
ABufferedWriter
将输出缓冲在字符缓冲区中,而不是立即将字符发送到底层Writer
(本例中为AFileWriter
)。这是一种很好的做法,因为它减少了可能代价高昂的写入次数。当缓冲区已满或显式调用flush()
时,字符将发送到底层写入程序
其次,Writer
应该始终关闭,这样就可以再次释放所有使用过的资源。close()
操作将在关闭前自动刷新缓冲区中剩余的所有字符。(请注意,对于不缓冲flush()
方法的写入程序,通常不会执行任何操作)
这就是代码中的基本错误:由于没有刷新或关闭BufferedWriter
,并且可能向文件中写入的字符数少于缓冲区大小,因此输出只保留在缓冲区中
您的代码中似乎存在其他一些错误(不会立即导致您报告的问题)
- 为每个要写入的字符串创建一个新的
FileWriter
。通常,在循环之前只使用一个声明的FileWriter
。由于您在覆盖模式下创建了编写器
,因此每个字符串
都将覆盖上一个字符串
- 如果文件test1.txt不存在,则在尝试创建
FileWriter
时,此代码将抛出FileNotFoundException
- 您使用字符串“q”作为停止添加到文件的标记,但在检查终止条件之前将“q”写入文件。我想这不是目的
您还应该在循环开始之前创建并打开filewriter,然后在循环完成后将其关闭。关闭应该在finally块中,或者您应该使用try with resources结构。您还应该在循环开始之前创建并打开filewriter,然后在循环完成后关闭它。关闭应该在finally块中,或者应该使用try with resources结构