网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用javabean实现文件上载(6)     
  文章作者:未知  文章来源:水木森林  
  查看:86次  录入:管理员--2007-11-17  
 
  用javabean实现文件上载(6)

   现在,我们首先来看看提取文件内容的代码。

   文件路径包含在“content-disposition”的后面。为提取文件路径和文件名字,doupload方法调用了setfilename私有方法。setfilename方法提取出文件路径和文件名字信息,然后把它们赋值给filepath和filename域。调用setfilename方法之后,filename域应该不再是null。如果此时filename域仍旧是null,则说明遇到了问题,doupload方法直接返回。

if (filename==null)
return;

   “content-disposition”行之后的下一行是内容类型行。因此,doupload方法接着调用readline方法,然后调用setcontenttype私有方法。setcontenttype方法和setfilename方法相似,它从原始字节数据中提取出上载文件的内容类型并保存到contenttype域。

   紧接内容类型行的下一行是空行,因此程序再调用了一次readline方法。

i = in.readline(line, 0, 128);

   接下来开始了真正的文件内容。我们先应该做好通过printwriter对象把文件写入磁盘的准备。

printwriter pw = new printwriter(new bufferedwriter(
new filewriter(
( savepath==null? "" : savepath ) + filename
)));

   上载文件保存到哪个位置取决于savepath域是否已经设置。如果savepath域没有设置,它的值是null,则文件将被保存到默认目录;如果savepath域已经设置,它的值不是null,则上载的文件被保存到它所指定的目录。

   然后我们就可以提取文件的内容。具体方法是使用while循环,每次循环读入一行内容并通过printwriter的输出方法把它写入磁盘。但我们知道,文件的最后一行包含两个回车换行符号,所以保存到磁盘的字节数据不应该包含这两个字符。因此,如果读入的行不是文件的最后一行,我们把所有读到的字节数据写入磁盘;如果读入的行已经是文件的最后一行,写入磁盘的字节数据要减去最后两个字符。
   然而,我们并不知道文件的大小,我们只知道紧接文件内容的下一行又是一个分界符;或者,如果文件是最后一个html表单元素,接下来的一行是分界符加上两个短划线字符。因此,只要检查下一行内容是否是分界符,我们就知道了何时应该结束while循环。这就是前面说分界符很重要的原因,在这里我们必须用到分界符。

   虽然我们可以读取下一行内容然后用startswith方法检查它是否是一个分界符,然而,由于字符串操作的开销非常大,为了减少字符串操作,我们比较readline读入的字节数组的长度。后者应该等于boundarylength + 2;或者,如果它是httpservletrequest对象中的最后一行,由于多出了最后两个短划线字符,它应该等于boundarylength + 4。由于一行内容即使不是分界符也可以和分界符一样长,当长度匹配之后我们又将它与分界符比较。这就是前面提到boundarylength很重要的原因了。

   整个处理过程的实现代码如下:

while (i != -1 && !newline.startswith(boundary)) {
i = in.readline(line, 0, 128);
if ((i==boundarylength+2 || i==boundarylength+4)
&& (new string(line, 0, i).startswith(boundary)))
pw.print(newline.substring(0, newline.length()-2));
else
pw.print(newline);
newline = new string(line, 0, i);
}

把文件内容保存到磁盘之后,我们关闭了printwriter。

pw.close();

   非文件的表单元素也可以用类似的方法提取。不同之处在于,此时我们不再把数据写入磁盘,而是把名字-值对保存到dictionary对象。

fields.put(fieldname, fieldvalue.tostring());

byte[] line = new byte[128];

(全文完)
 
 
上一篇: 用javabean实现文件上载(5)    下一篇: 用javamail api编写可带附件的邮件发送程序
  相关文档
hibernate持久化技术中多对多关系应用 11-17
singleton设计模式简单介绍 11-17
用jbuilder高效率开发java程序 11-17
scjp 考 试 大 纲 11-17
在 java 应用程序中计划重复执行的任务 11-17
john hancock互助人寿保险公司 11-17
j2me程序开发环境配置的一个简单例子 11-17
ejb服务器glassfish build 32g 发布 11-17
java控件设计入门 11-17
antlr studio for eclipse插件发布 11-17
java繁体中文处理完全攻略 11-17
java之父:关于java我也有遗憾 11-17
Java中计算任意两个日期之间的工作天数 08-07
返回值过载 11-17
java程序如何穿透带有密码验证的代理 11-16
wireless messaging api(2) 11-17
datagrid表格上字符串的html编码详解 11-17
类反射简化struts应用程序的开发(一) 11-17
使用sets 11-17
一个 jdbc 连接池例子 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息