文本文件的不完整副本

时间:2015-01-03 09:57:16

标签: java file bufferedwriter

这是我的输入文件:

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

这是输出:

This is  a file test. 
please take 
notice of 

我不明白它停止的原因和“它”。 ,但它显示“测试”一词。 这是代码:

  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();
}

}

2 个答案:

答案 0 :(得分:3)

在循环外使用另一个_buffwrt.flush();来清除剩余的内容,并且最后不要忘记_buffwrt.close();

<强>更新
@Svetlin Zarev提到了一个很好的观点,即最后只有_buffwrt.close();足以冲洗剩余的东西 http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29

答案 1 :(得分: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了解详情