我必须从数据库中获取500K行并将该数据写入文件,这意味着要执行I / O操作。我已经做了两个步骤。
将每一行一个接一个地写入文件。
制作这些行的大块。将这些行追加到StringBuffer中,然后打印出来。这会更好,但是有什么方法可以使File I / O自行使用而不使用StringBuffer来创建缓冲区。由于此String Buffer需要更多时间(内部使用Arrays.copyOf)
请给我建议
请找到与此所附的代码
public void fetchDataWithChunkSpace(Connection con)throws Exception
{
String query ="select * from lis.testxml ";
long startTime=new Date().getMinutes();
PreparedStatement stmt = con.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
PrintWriter pw = new PrintWriter(new File("c:\\test_chunkSpace.xml"));
pw.write("<?xml version='1.0' encoding='UTF-8'?>");
StringBuffer sb = new StringBuffer();
String t=null;
long count =0;
while(rs.next())
{ count++;
t = rs.getString("xmltest");
sb = sb.append(t);
if(count%100==0)
{
pw.write(sb.toString());
sb = new StringBuffer();
System.out.println(count);
}
}
pw.write("\n");
pw.write("</EndTag>");
pw.close();
stmt.close();
con.close();
long endTime=new Date().getMinutes();
System.out.println("chunkSpace ---> " + (endTime-startTime));
}
最佳答案
查看BufferedOutputStream或BufferedWriter。
还应考虑StringBuffer是与StringBuilder不同的具有同步方法的线程安全类。
更新。
试试这个代码:
Writer pw = new BufferedWriter(new PrintWriter(new File("c:\\test_chunkSpace.xml")));
pw.write("<?xml version='1.0' encoding='UTF-8'?>");
String t;
while (rs.next()) {
t = rs.getString("xmltest");
pw.write(t);
}