I have a database with 150k records. I want to write this to file as fast as possible. I've tried many approaches, but all seem slow. How do I make this faster?
I read these records in blocks of 40k. So first I read 40k then another 40k and so on.
After reading the records, this process returns a StringBuilder which contains 40k lines. Then we write this StringBuilder to a file.
private static void write(StringBuilder sb, Boolean append) throws Exception { File file = File.createTempFile("foo", ".txt"); FileWriter writer = new FileWriter(file.getAbsoluteFile(), append); PrintWriter out = new PrintWriter(writer); try { out.print(sb); out.flush(); writer.flush(); } finally { writer.close(); out.close(); } } I read this other example but it is equally slow: Fastest way to write huge data in text file Java
I also tried it with NIO api:
private static void write(StringBuilder sb, Boolean append)) throws Exception { FileChannel rwChannel = new FileOutputStream("textfile.txt", true).getChannel(); ByteBuffer bb = ByteBuffer.wrap(sb.toString().getBytes("UTF-8")); rwChannel.write(bb); rwChannel.close(); } Which is the best method to write/append huge data into file?
out.print(sb). This forcestoString()on the builder, and that in turn involves copying the underlying character array. If you need speed, try simple rewriting using a char array buffer and raw byte streams.