2015-01-03 3 views
1

Это мой входной файл:Неполная копия текстового файла

This is a file test. 
please take 
notice of it. 
Peace. 

и это выход:

This is a file test. 
please take 
notice of 

Я не understant, почему он останавливается и «ее». , но он отображает слово «тест». Вот код:

import java.io.*; 
    import java.util.*; 

    public class FileTest { 

public static void readFile() throws Throwable { 
    File _output = new File("output.txt"); 
    FileWriter _filewr = new FileWriter(_output); 
    BufferedWriter _buffwrt = new BufferedWriter(_filewr); 
    FileInputStream f = new FileInputStream(
      "C:\\Users\\Diana\\Desktop\\FileTest\\test.txt.txt"); 
    BufferedReader _buffer = new BufferedReader(new InputStreamReader(f)); 
    String _str = _buffer.readLine(); 
    while (_str != null) { 
     String[] _vect = _str.split(" "); 
     int i; 
     for (i = 0; i < _vect.length; i++) { 
      if (_vect[i].contains(".")) { 
       _buffwrt.write(_vect[i] + " "); 
       break; 
      } 

      else 
       _buffwrt.write(_vect[i] + " "); 
      _buffwrt.flush(); 
     } 
     _str = _buffer.readLine(); 

    } 

} 

public static void main(String[] args) throws Throwable { 
    readFile(); 
} 

}

+0

, что вы видите в выходной файл? все предложение правильно? – SMA

+0

@almasshaikh да весь текст, который я написал на вход – nnewbie

+0

nah, на ваш вопрос? Я считаю, что вы пытаетесь найти, почему он останавливается на «этом»? или что-то другое? – SMA

ответ

3

использовать другой _buffwrt.flush(); вне цикла, чтобы очистить что-либо оставшееся и не забудьте _buffwrt.close(); в конце

обновление
@Svetlin Зарев упомянуть Хороший момент, что только _buffwrt.close(); в конце будет достаточным, чтобы слить что-нибудь еще http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29

+1

спасибо, человек, который действительно сработал! В следующий раз я буду помнить то, что вы сказали о флешах и закрытии файла. – nnewbie

+1

'Закрыть' будет' скрывать 'содержимое писателя, поэтому нет необходимости в явном 'flush'. Javadoc: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29 –

+0

спасибо за подсказку –

1

Основной ответ: инструкция break вырывается из цикла, что вы хотите, но также пропускает инструкцию _buffwrt.flush();. Поскольку вы не закрываете выходные потоки правильно, буферизованный контент просто отбрасывается.

В то время как вы могли бы поставить более flush заявления в это своего рода поражения цели BufferedWriter, вместо этого, вы должны просто управлять вами ресурсы лучше и убедиться, что они становятся закрытыми, когда вы сделали с ними, что будет, в в этом случае очистите буферы перед закрытием ресурса.

File _output = new File("output.txt"); 
try (BufferedWriter _buffwrt = new BufferedWriter(new FileWriter(_output))) { 
    try (BufferedReader _buffer = new BufferedReader(new FileReader("test.txt"))) { 
     String _str = _buffer.readLine(); 
     while (_str != null) { 
      String[] _vect = _str.split(" "); 
      int i; 
      for (i = 0; i < _vect.length; i++) { 
       if (_vect[i].contains(".")) { 
        System.out.println("1 " + _vect[i]); 
        _buffwrt.write(_vect[i] + " "); 
        break; 
       } else { 
        System.out.println("2 " + _vect[i]); 
        _buffwrt.write(_vect[i] + " "); 
       } 
      } 
      _str = _buffer.readLine(); 
     } 
    } 
} catch (IOException exp) { 
    exp.printStackTrace(); 
} 

Посмотрите на The try-with-resources Statement для получения более подробной информации

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