Sau khi chơi với PrintWriter
và các tập tin, tôi có một nghi ngờ về lý do tại sao làm đôi khi tôi đọc tác phẩm của tôi ngay khi tôi tạo ra chúng, có những mâu thuẫn, ví dụ:Khi nào PrintWriter tự động in ra tệp?
File file = new File("Items.txt");
int loopValue = 10;
try {
PrintWriter fout = new PrintWriter(file);
for (int i = 0; i < loopValue; i++) {
fout.print(i + " asdsadas" + System.lineSeparator());
}
//fout.flush(); <-- I know if I call flush or close this problem don't occur
//fout.close();
System.out.println("Here is the file:");
Scanner readFile = new Scanner(file);
while (readFile.hasNext()) {
System.out.println(readFile.nextLine());
}
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
}
Nếu tôi chạy mã này, tôi sẽ đọc trong giao diện điều khiển một tập tin rỗng, một cái gì đó như thế này:
Here is the file:
Nhưng nếu tôi thay đổi loopValue
một cái gì đó giống như 10000, tôi sẽ có một cái gì đó như thế này:
Here is the file:
0 asdsadas
1 asdsadas
2 asdsadas
...
... continues
...
9356 asdsadas
9357 asdsadas
9358 <--- here ends, note that it doesnt end in the value 9999
Tôi biết rằng nếu tôi gọi flush()
hoặc close()
trước khi đọc tệp, tôi có thể loại bỏ vấn đề này, nhưng tại sao điều này lại xảy ra? Khi nào thì PrintWriter
quyết định đó là thời gian để làm sạch bộ đệm của nó mà tôi không biết khi nào? và tại sao khi tôi đóng hoặc tuôn ra PrintWriter
vấn đề này sẽ không xảy ra?
Cảm ơn!
Vui lòng xem lại các câu trả lời được đưa ra bên dưới. –