请教bufferedwriter问题

yufeng13 2009-12-09 04:45:33
目前把数据库的数据导入到csv文件,使用bufferedwriter
response.setContentType("application/x-msdownload;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String("数据.csv".getBytes(), "iso-8859-1"));
ServletOutputStream out = response.getOutputStream();
BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(out));

大约下载的文件到达9M左右,数据没有下载完整,请教大家bufferedwriter是否有生成文件大小限制,另外如何设置bufferedwriter的缓存大小,如 BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(out),s);
s的值应设成什么,多大比较好。谢谢!
...全文
445 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
amdgaming 2009-12-09
  • 打赏
  • 举报
回复
bang up..
yufeng13 2009-12-09
  • 打赏
  • 举报
回复
我把程序改成response.setContentType("application/x-msdownload;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="
+ new String("数据.csv".getBytes(), "iso-8859-1"));
ServletOutputStream out = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
。。。。
while (rs.next())
{
sbData = new StringBuffer();
sbData.append("dsdf");
...
sbData.append("\n");
bos.write(sbData.toString().getBytes());
}
rs.close();
bos.flush();
bos.close();
out.close();

文件大小也是限制在9M左右,到底是哪里错了,各位高手帮忙看看,谢谢!
crazylaa 2009-12-09
  • 打赏
  • 举报
回复
用BufferedOutputStream 来读。可以一个字节一个字节读,cache到一定量如1024字节再写一次文件。记得最后把剩下的未达到1024字节的那段写进去。
whut0802 2009-12-09
  • 打赏
  • 举报
回复
既然存在着数据的丢失,那么要是我的话,我就不用BufferedWriter了,我用字节流来读取,呵呵就是不知道LZ是不是一定要用BufferedWriter了

byte[] buff=new byte[1024];
ServletOutputStream out = response.getOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(out);
int len=0;
while(....){
bos.write(buff,0,len);
}
bos.close();
wss_scaler 2009-12-09
  • 打赏
  • 举报
回复
应该不是 s 值的问题,这个值默认就足够大了。
yufeng13 2009-12-09
  • 打赏
  • 举报
回复
难道大家没碰到过这问题??
swandragon 2009-12-09
  • 打赏
  • 举报
回复
如 BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(out),s);
s的值应设成什么,多大比较好
s是一个正整数,多大比较好不好说
yufeng13 2009-12-09
  • 打赏
  • 举报
回复
难道下载时数据丢失,基本大小都在9M左右,具体是出错在什么环节。。
anly_hz 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luqing414 的回复:]
你应该是用字节数组来处理吧,byte[] b = new byte[1024];
while(。。。)
bufWriter.write(b);
完后还要flush
[/Quote]


byte[] b = new byte[1024];
这样太大了,也可能读不完整,建议用
byte[] b = new byte[];
或者 byte[] b = new byte[1];
yufeng13 2009-12-09
  • 打赏
  • 举报
回复
不太明白,能否讲细点:)
luqing414 2009-12-09
  • 打赏
  • 举报
回复
你应该是用字节数组来处理吧,byte[] b = new byte[1024];
while(。。。)
bufWriter.write(b);
完后还要flush

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧