2014-09-01 105 views
1

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

这里是我的代码:

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

    } 
} 

任何人有任何想法来解决这个问题?请帮助.. 感谢先进。!!

回答

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 
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关闭会自动刷新它。

+0

您应该在循环开始之前创建并打开您的文件写入器,然后在循环结束后关闭它 – jk47 2014-09-01 15:05:53

+0

close应该在finally块中,或者应该使用try-with-resources结构 – bowmore 2014-09-01 15:06:02

0

它看起来并不像你冲洗你的BufferedWriter,这可能是一个问题。

您也永远不会关闭BufferedWriter,这也有助于自从BufferedWriter在关闭过程中自行刷新。

0

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

第二个Writer应该总是关闭,以便任何使用的资源可以再次释放。在关闭之前,close()操作将自动刷新缓冲区中剩余的任何字符。 (请注意,作家不缓冲flush()方法通常什么都不做)

这基本上是哪里出了问题在你的代码:既然你不冲洗或关闭BufferedWriter,并有可能写更少的字符的文件比缓冲区大小,您的输出只是保留在缓冲区中。

其他的一些事情似乎是错在你的代码(即不立即使你报告问题)

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