这是我的输入文件:
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();
}
}
答案 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();
}