2016-04-21 88 views
0

我正在编写一个函数,它将检查文件CQ.txt是否存在,如果是,请从中读取。我一直有一个问题,我已经在while循环之外声明了printwriter。在应用程序的后面,应该写出问题1:正确或问题2:对文件更正。写入文本文件问题Java

但是,它没有。它创建文本文件,但是当我检查它时,它显示为空。

下面是代码,预先感谢您:

package receiverhost; 

import java.io.*; 
import java.net.*; 

public class ReceiverHost { 
public static void main(String[] args) throws Exception { 

    //set up socket on port 5000 
    ServerSocket Server = new ServerSocket(5000); 

    //set up "cookie"/ text file to be written to/ read from eventually 
    Writer DB = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("CQ.txt"), "utf-8")); 

    System.out.println("TCPServer Waiting for client on port 5000"); 

    while(true){ 

     //declare string fromclient 
     String fromclient; 
     Socket connected = Server.accept(); 
     System.out.println(" The client" + " " + connected.getInetAddress() + ":" + connected.getPort() + " is connected "); 

     //read/ retrieve client output stream 
     BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connected.getInputStream())); 

      fromclient = inFromClient.readLine(); 
      if(fromclient.equals("Q1C")){ 
       //write to CQ.txt 
       DB.write("Q1: correct"); 
      } 

      if(fromclient.equals("Q2C")){ 
       //write to CQ.txt 
       DB.write("Q2: correct"); 
      } 
     } 
    } 
} 
+0

您是否试过在简单的HelloWorld程序中写入文件? – DavidS

+0

@DavidS我做的第一件事,它显然是xD .. –

回答

0

的BufferedWriter顾名思义缓冲到文件的写入。任何对BufferedWriter的写入都将写入内存缓冲区而不是直接写入文件。

这样做是出于提高效率的目的,并为了节省CPU浪费的IO时间。

每次调用bufferedWriter.write其附加的数据到缓冲器,写缓冲器中的数据到文件仅当缓冲区croses阈值时,默认或通过的BufferedWriter供给(FileWriter的,缓冲区大小)构造时间。

建议刷新写入程序并在将所有数据写入bufferedWriter后将其关闭。

理想的样本代码看起来像

Writer DB = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("CQ.txt"), "utf-8")); 

DB.write("Dummy Data1 "); 
DB.write("Dummy Data2"); 

DB.flush(); 
DB.close(); 
收盘后

并刷新你应该能够看到文件中的所有数据。