由于要求把数据库查询出来的海量数据写入文件,经常遇到内存溢出的情况,下面是当前的一段代码,但效果并不是很明显。麻烦高手贴段代码参考一下:
Vector vec;// 存放数据库查询结果的容器
Hashtable table;
Enumeration enume;// table和enume用来读vec中的数据
DataOutputStream out = null;
String filePath="d:/sample.txt"; // 文件名加上文件路径
int int_count=50;//写文件的总次数
int per_page; // 每次要向文件中写与多少条数据
try
{
StringBuffer outData = null;
for(int i=1;i<=int_count;i++)
{
out=new DataOutputStream(new FileOutputStream(filePath));
outData=new StringBuffer();
vec=DBController.executeQueryByPage(sql,i,per_page);//第i次从数据库中取数据
for(int j=0;j<vec.size();j++)
{
table=(Hashtable)vec.get(j);
enume=table.keys();
while(enume.hasMoreElements())
{ // 把查询的内容写入到StringBuffer中
outData.append(table.get(enume.nextElement()).toString()+"\t");
}
outData.append("\r\n");
}
out.write(outData.toString().getBytes());
out.flush();
outData = null;
vec.clear();
}
out.close();
}catch(Exception e)
{
......
}
我对java写文件不是太懂,望高手给出几种buffer写文件的各种特点,性能优势等区别,针对海量数据的写入文件最好贴段代码参考一下,不胜感激。
Vector vec;// 存放数据库查询结果的容器
Hashtable table;
Enumeration enume;// table和enume用来读vec中的数据
DataOutputStream out = null;
String filePath="d:/sample.txt"; // 文件名加上文件路径
int int_count=50;//写文件的总次数
int per_page; // 每次要向文件中写与多少条数据
try
{
StringBuffer outData = null;
for(int i=1;i<=int_count;i++)
{
out=new DataOutputStream(new FileOutputStream(filePath));
outData=new StringBuffer();
vec=DBController.executeQueryByPage(sql,i,per_page);//第i次从数据库中取数据
for(int j=0;j<vec.size();j++)
{
table=(Hashtable)vec.get(j);
enume=table.keys();
while(enume.hasMoreElements())
{ // 把查询的内容写入到StringBuffer中
outData.append(table.get(enume.nextElement()).toString()+"\t");
}
outData.append("\r\n");
}
out.write(outData.toString().getBytes());
out.flush();
outData = null;
vec.clear();
}
out.close();
}catch(Exception e)
{
......
}
我对java写文件不是太懂,望高手给出几种buffer写文件的各种特点,性能优势等区别,针对海量数据的写入文件最好贴段代码参考一下,不胜感激。
解决方案 »
- 怎么把JDialog子窗体的数据传递给主程序父窗体
- 怎么在switch语句中判断用户是否仅仅输入回车啊
- 在日历日期仲添加备注,不知怎么实现
- 在未关闭一个stream或writer的情况下再次打开了文件,会有什么后果
- 求救,怎么实现iterator的双重循环
- 使用Java如何存取DB2的BLOB、CLOB字段?急用。
- 有关eclipse
- 请问,j2se的中文手册到哪里有下的?
- 在初学java时,碰到了这样一个问题
- CORBA是什么东东?哪位大虾给点详细的资料!
- org.apache.commons.net.ftp.FTPClient来或取ftp服务器上的某个文件有问题
- 我只要求界面上有个十字随时出现,不要有任何画过的痕迹,该怎样解决,请教???代码如下:
out.flush();你这样写的话buffer都没用了
到write完之后再flush试试看
就是out 在close之前flush,没必要write一次flush一次,另外你最后已经close了,其实不写flush效果也一样