Problem:
A Java program attempt to convert CSV data into SQL commands is experiencing issues with its output file. Not all the data written to BufferedWriter appears in the output file.
Details:
The program reads a CSV file with over 10,000 lines and generates SQL statements to insert the data into a table. However, the output file is truncated midway, with the last incomplete statement missing part of a value.
Code:
// ... while((line = in.readLine())!= null) { String[] esa = line.split(","); sqlstr = "insert into nyccrash values ("+esa[0]+", "+esa[1]+", "+esa[2]+", "+esa[3]+", "+esa[4]+", "+esa[5]+", "+esa[6]+");\n"; out.write(sqlstr); } // ...
Solution:
The issue arises because the output buffer is not flushed during the writing process. The default buffer size for BufferedWriter is 8192 characters, sufficient to hold multiple lines. After the buffer is full, data is not written to the file until the buffer is flushed manually.
To ensure all data is written to the output file, it is necessary to explicitly close the OutputStream, which flushes any remaining data in the buffer:
out.close();
Closing the output stream guarantees that all data, including the partial statement, is flushed to the file before the program exits.
The above is the detailed content of Why Isn't My BufferedWriter Flushing All Data to the Output File?. For more information, please follow other related articles on the PHP Chinese website!