2014-12-10 4 views
0

Цель: Сервер считывает данные из текстового файла, отправленного клиентом. Сервер хранит эти данные в другом текстовом файле.BufferedWriter НЕ записывает в .txt файл [JAVA]

Проблема: Я могу читать в текстовом файле и печатать его на консоли, однако, когда я запускаю свой код с помощью BufferedWriter и открываю новый текстовый файл после, файл пуст. Я не совсем уверен, неправильно ли я использовал функцию BufferedWriter, или если у меня отсутствуют какие-либо ключевые функции?

Код:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 

String fromServer; 
String fromUser; 

while (true) { 

     fromUser = stdIn.readLine(); 

     if (fromUser != null) { 

      FileReader file = new FileReader("client-temp.txt"); 
      BufferedReader tc = new BufferedReader(file); 
      BufferedWriter bw = new BufferedWriter(new FileWriter("datastore.txt")); 

      String line; 

      while ((line = tc.readLine()) != null) 
      { 
       String[] data = line.split(","); 
       String sensortype = data[0]; 
       String date = data[1]; 
       String time = data[2]; 
       String reading = data[3]; 

       String newdata = sensortype + date + time + reading; 
       System.out.println(line); 

       if (line != null) 
       { 
        out.write(line); 
        out.flush(); 
       } 

       System.out.println("Data sent to file"); 

      } 


      System.out.println(EmsClientID + " sending " + fromUser + " to EmsServer"); 
      out.println(fromUser); 
     } 
     fromServer = in.readLine(); 
     System.out.println(EmsClientID + " received " + fromServer + " from EmsServer"); 
    } 
+0

Вы не скрывали и не закрывали писателя ... кроме того, где вы на самом деле когда-либо писали в 'bw'? – MadProgrammer

+0

я использовал вне.flush()? @MadProgrammer – user3009232

+0

Но что такое 'out'? Все, что я вижу, это 'bw', который никогда не используется ... – MadProgrammer

ответ

0

Вы никогда не звоните flush или close по заказу BufferedWriter, по сути, вы полностью игнорируете его. Кроме того, управление ресурсами отсутствует. Если вы откроете ресурс, вы должны закрыть его.

Например ...

FileReader file = new FileReader("client-temp.txt"); 
try (BufferedReader tc = new BufferedReader(file)) { 
    try (BufferedWriter bw = new BufferedWriter(new FileWriter("datastore.txt"))) { 

     String line; 

     while ((line = tc.readLine()) != null) 
     { 
      String[] data = line.split(","); 
      String sensortype = data[0]; 
      String date = data[1]; 
      String time = data[2]; 
      String reading = data[3]; 

      String newdata = sensortype + date + time + reading; 
      System.out.println(line); 

      if (line != null) 
      { 
       bw.write(line); 
       bw.newLine(); 
      } 

      System.out.println("Data sent to file"); 
     } 
    } catch (IOException exp) { 
     exp.printStackTrace(); 
    } 
} catch (IOException exp) { 
    exp.printStackTrace(); 
} 

См The try-with-resources Statement для более подробной информации

(пс: Вы можете усложняют try-with-resource заявление, открывая несколько ресурсов в рамках одной и той же try (...) { секции, но я хотел бы продемонстрировать базовая концепция)

0

Ваш код является неполным. Я собираюсь пойти на каприз здесь и принять вашу проблему.

Добавить

out.close(); 

в конце кода.

Смежные вопросы