struts将sql查询结果下载到csv

struts2实现输入id,查询数据库并将结果下载到csv的功能。
查询结果封装在list中,下载的action中执行以下内容

private static final String TMP_DIR_PATH = System.getProperty("java.io.tmpdir");

fileName_ = createFileName();
File file = new File(TMP_DIR_PATH, fileName_);
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
bufferedWriter.write(UserInfo.getHeader());//写csv的header
bufferedWriter.write("\r\n");//换行符
for (int i = 0; i < list.size(); i++) {
    //遍历list,bean中有方法getAllColumnsString()返回属性用逗号拼接的字符串
    //如“1,Jack,Beijing\r\n”也就是csv的一行数据
    bufferedWriter.write(list.get(i).getAllColumnsString());
}
bufferedWriter.close();
//写完之后返回一个FileInputStream给前台,struts.xml中使用
fileInputStream_ = new FileInputStream(file);
//接下来删除临时文件
file.delete();//但是删除失败了?还在temp里面是为啥?

struts.xml

<result name="success" type="stream">
    <param name="contentType">application/octet-stream</param>
    <param name="inputName">fileInputStream</param>
    <param name="contentDisposition">attachment;fileName="${fileName}"</param>
    <param name="bufferSize">1024</param>
</result>
  • 删除temp文件失败之外(这块自己再搜搜看)下载CSV的功能上没有问题,但是想问各位大神,这思想对吗?先写进file再用fileInputStream传给view?
    有什么错误或者要注意的可以改善的点吗?
阅读 1.6k
1 个回答

如果不需要保存文件的话,直接写流返回就可以,不需要写文件再返回

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题