在服务端生成文本文件的流,在客户端下载

时间:2022-11-09 11:52:50
要求:
1。从页面发一个下载文件得命令。
2。在服务端,从数据库提取数据生成文本文件的流

   这里不要在服务端生成实际的文件,而应该是直接生成流

请高手赐教

11 个解决方案

#1


response.setHeader("content-disposition", "attachment;filename="+projectName+".egi");
   StringInputStream saveasout = new StringInputStream (数据库得到的string);//可能类名字有误,参照java.io
                         byte[] line = new byte[ (int) saveasout.length()];
                         saveasout.read(line);
                         response.getOutputStream().write(line);
                         saveasout.close();

#2


楼上的代码应该可以工作
但是需要考虑Buffer和大数据量问题,如果数据很大的话,会OutOfMemory的

#3


这样没有格式呀,只是把数据写出来
现在我要从数据库中提取四个字段,用符号隔开作为一行,每一行表示一条记录。
这样可以实现吗?

#4


有了方法具体思路你自己想就行了.
String outString = "";
while(rs.next())
{
  String str1 = re.getString(1);
String str2 = re.getString(2);  
String str3 = re.getString(3);
String str4 = re.getString(4);
outString = str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4+"\n" ;
}

   StringInputStream saveasout = new StringInputStream (outString );//
建议再用BufferStream包装一下.
这样不就满足你的要求了吗???

#5


另一端用readline,读出每一行

#6


String outString = "";
while(rs.next())
{
  String str1 = re.getString(1);
String str2 = re.getString(2);  
String str3 = re.getString(3);
String str4 = re.getString(4);
outString = str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4+"\n" ;
}

你这样的速度非常非常的慢的,占用内存数是未知的,
当然不应该保存到String中,应该直接开始

out.println(str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4);

甚至str1,str2都不应该保存下来

#7


关注+学习

#8


呵呵: ChDw(米) 说的对,我只是提示一下,说一下思路.
具体优化还要靠他自己了 :)
要用String的话,最好也要用BufferString

#9


多谢各位,我试一下

#10


路过 学习1下 
to  littlecong(虫子) 哈哈 好啊

#11


谢谢各位的大力支持,下面的代码调试通过
<%@ page import="java.util.*," %>
<%@ page import="java.io.*" %>
<%
  String filetype = "txt";
  String filename = "lifxue";
  if (filetype.length()==0)
    filename=filename;
  else
  filename=filename+"."+filetype;
  try
  {
  String strtext = "lifxue,lifxue,lifxue,lifxue\r\nlifxue,lifxue,lifxue2,lifxue2\r\n";

  response.setContentType("application/x-msdownload");
  response.setHeader("Content-disposition","attachment;filename="+filename);

  StringBufferInputStream saveasout = new StringBufferInputStream (strtext );
  byte[] line = new byte[ (int) saveasout.available()];
      saveasout.read(line);
  response.setHeader("Content-Length",String.valueOf(line.length));
  javax.servlet.ServletOutputStream servletOut=response.getOutputStream();
    servletOut.write(line);
  servletOut.close();
      //saveasout.close();
}
  catch (Throwable e)
{
System.out.print("\n下载文件["+filename+"]过程中出现错误:["+e.toString()+"]");
}
%>

#1


response.setHeader("content-disposition", "attachment;filename="+projectName+".egi");
   StringInputStream saveasout = new StringInputStream (数据库得到的string);//可能类名字有误,参照java.io
                         byte[] line = new byte[ (int) saveasout.length()];
                         saveasout.read(line);
                         response.getOutputStream().write(line);
                         saveasout.close();

#2


楼上的代码应该可以工作
但是需要考虑Buffer和大数据量问题,如果数据很大的话,会OutOfMemory的

#3


这样没有格式呀,只是把数据写出来
现在我要从数据库中提取四个字段,用符号隔开作为一行,每一行表示一条记录。
这样可以实现吗?

#4


有了方法具体思路你自己想就行了.
String outString = "";
while(rs.next())
{
  String str1 = re.getString(1);
String str2 = re.getString(2);  
String str3 = re.getString(3);
String str4 = re.getString(4);
outString = str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4+"\n" ;
}

   StringInputStream saveasout = new StringInputStream (outString );//
建议再用BufferStream包装一下.
这样不就满足你的要求了吗???

#5


另一端用readline,读出每一行

#6


String outString = "";
while(rs.next())
{
  String str1 = re.getString(1);
String str2 = re.getString(2);  
String str3 = re.getString(3);
String str4 = re.getString(4);
outString = str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4+"\n" ;
}

你这样的速度非常非常的慢的,占用内存数是未知的,
当然不应该保存到String中,应该直接开始

out.println(str1 +"自己定义的分割符号"+ str2 +"自己定义的分割符号"+ str3 +"自己定义的分割符号"+ str4);

甚至str1,str2都不应该保存下来

#7


关注+学习

#8


呵呵: ChDw(米) 说的对,我只是提示一下,说一下思路.
具体优化还要靠他自己了 :)
要用String的话,最好也要用BufferString

#9


多谢各位,我试一下

#10


路过 学习1下 
to  littlecong(虫子) 哈哈 好啊

#11


谢谢各位的大力支持,下面的代码调试通过
<%@ page import="java.util.*," %>
<%@ page import="java.io.*" %>
<%
  String filetype = "txt";
  String filename = "lifxue";
  if (filetype.length()==0)
    filename=filename;
  else
  filename=filename+"."+filetype;
  try
  {
  String strtext = "lifxue,lifxue,lifxue,lifxue\r\nlifxue,lifxue,lifxue2,lifxue2\r\n";

  response.setContentType("application/x-msdownload");
  response.setHeader("Content-disposition","attachment;filename="+filename);

  StringBufferInputStream saveasout = new StringBufferInputStream (strtext );
  byte[] line = new byte[ (int) saveasout.available()];
      saveasout.read(line);
  response.setHeader("Content-Length",String.valueOf(line.length));
  javax.servlet.ServletOutputStream servletOut=response.getOutputStream();
    servletOut.write(line);
  servletOut.close();
      //saveasout.close();
}
  catch (Throwable e)
{
System.out.print("\n下载文件["+filename+"]过程中出现错误:["+e.toString()+"]");
}
%>

相关文章