J2EE 内存中读写文件 (将数组保存为.txt文件)

Thinking_In_IT 2009-06-04 05:50:37
我有这样一个数组fieldContent:
String[] fieldContent={
amtAllocDetailVo.getMid(),
amtAllocDetailVo.getMerName(),
amtAllocDetailVo.getDeveSide(),
amtAllocDetailVo.getMachProvSide(),
amtAllocDetailVo.getSuppProvSide(),
amtAllocDetailVo.getMerType(),
amtAllocDetailVo.getRate(),
amtAllocDetailVo.getProtRate(),
amtAllocDetailVo.getPartnerAmt(),
amtAllocDetailVo.getCompanyAmt()
};
//amtAllocDetailVo里面存的是数据表里的相应字段
我想把这个数组在内存(不保存在硬盘上)中保存为.txt文件,传输给客户端(JSP页面下载)。


请问怎么实现?(JSP页面上的下载按钮代码我已经写了)
...全文
556 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxfei 2009-06-05
  • 打赏
  • 举报
回复
用StringReader?

非典型射手 2009-06-05
  • 打赏
  • 举报
回复
在JSP中的request对象里获取outputstream,然后把文件写入这个流中
Thinking_In_IT 2009-06-05
  • 打赏
  • 举报
回复
没有人用代码说话吗? 我现在用代码来吧问题详细解释一下问题吧。
//list里面存的是amtAllocDetail表中的所有记录
Iterator it = list.iterator();
int i;
for (i = 3; i < list.size() + 3; i++) {
amtAllocDetailVo = (AmtAllocDetailVo) it.next();
String[] fieldContent={
amtAllocDetailVo.getMid(),
amtAllocDetailVo.getMerName(), amtAllocDetailVo.getDeveSide(), amtAllocDetailVo.getMachProvSide(),
amtAllocDetailVo.getSuppProvSide(),
amtAllocDetailVo.getMerType()
};
}
//现在数组fieldContent中已经存了很多数据

//将数组中的数据写入.txt文件(不要引入路径,在内存中完成写入工作),JSP页面上直接下载

//如下代码是不合适的:
String fileName = "1";
File file = new File("d:\\");//这里有D盘着个路径,如果是linux呢?有D盘这概念
if (file.exists()) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");// 处理中文文件名的问题
fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型
response.setHeader("Content-Disposition","attachment; filename=" + fileName+".txt");
OutputStream os = response.getOutputStream();
while (bis.read(buffer) > 0) {
os.write(buffer);
}
bis.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}


所以我想通过吧数组保存在内存里面,然后把数组中的内容用流写入.txt文件(.txt文件也在内存里面),这样就程序就

可以在winodws和linux 移植 不会出现问题。望高手赐教
ihusr 2009-06-05
  • 打赏
  • 举报
回复
其实那个也差不了多少,直接把流用out.write输出,我是有做过一个例子,不过现在不在这台电脑上。
ahopedog 2009-06-05
  • 打赏
  • 举报
回复
UP,基本思路差不多
非典型射手 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kaoh1631 的回复:]
没有人用代码说话吗? 我现在用代码来吧问题详细解释一下问题吧。
//list里面存的是amtAllocDetail表中的所有记录
Iterator it = list.iterator();
int i;
for (i = 3; i < list.size() + 3; i++) {
amtAllocDetailVo = (AmtAllocDetailVo) it.next();
String[] fieldContent={
amtAllocDetailVo.getMid(),
amtAllocDetailVo.getMerName(), amtAllocDetailVo.getDeveSide(), amtAllocDetailVo.getMachProvSi…
[/Quote]

你这已经写的很好了啊,,你现在的过程是 字符串 -> 文件 -> JSP页面。但是你为什么要在中间多出一步来呢?直接从字符串写入jsp页面里不就得了么
晨星 2009-06-04
  • 打赏
  • 举报
回复
将jsp上的数据导出为excel,可能需要用到浏览器客户端的技术。
如果你是这个意思的话,那么你也可以编写客户端的脚本或组件来生成txt文件。
Thinking_In_IT 2009-06-04
  • 打赏
  • 举报
回复
或许你还没有明白我得意思。

FileWriter fw=new FileWriter(path + "file://XXXX.txt);

path + "file://XXXX.txt 这是一个物理路径了。

在内存中将数组用流读出后,保存为*.txt文件(这个*.txt文件不在物理硬盘上,而在内存里)

在WEB(JSP页面)上直接给用户下载。

就跟使用jxl包,将JSP上的table表格数据,导出excel道理是一样的。
ihusr 2009-06-04
  • 打赏
  • 举报
回复
FileWriter fw=new FileWriter(path + "file://XXXX.txt);//建立FileWriter对象,并实例化fw
//将字符串写入文件
foreach(string str : fieldContent)
{
fw.write(str);
}
fw.close();

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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