FileItem类主要是封装了一个File Item或者是FormItem,它的主要的 方法如下,需要说明的是对于FormItem类型的,getName会得到null, getContentType会得到null,如果是FileItem类型的,getName会得到文件的全路径,getContentType会得到文件的类型。 然后以前在使用的时候因为是数据是直接从InputStream里面读取的,现在看了代码实现,发现 是如果数据在内存里面,则直接返回,如果数据不在内存里面,则再读取一下文件,然后将数据返回。 FileItem类主要是定义了接口,这些都是一些比较常见的操作。 DiskFileItem类是它的实现,也是平常默认返回的FileItem类型,里面感觉比较 值得注意的是write函数,它可以直接将数据写入到指定的文件里面去。但是对于 在内存中的数据则是可以写无数次均是可以的,但如果数据不在内存中,则里面的 实现是先尝试使用rename操作,如果失败的话再尝试着采用copy流的形式来进行。 但是一般情况下rename操作都是可以成功的,所以在这个操作被调用后temp里面的 文件很可能就不在了,所以调用它时要特别小心。DefaultFileItem类则是完全继承DiskFileItem这个类,只有构造函数,其他则没有从新实现,所以这个感觉很没有必要,Fileupload也将它设置为Deprecated。 FileItem类的常用方法 1.boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。 2.String getName()。getName方法用来获得文件上传字段中的文件名。 3.String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。 4.void write(File file)。write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,该方法完成后,临时文件可以会被删除。该方法也可以将普通表单字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。 5.String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。public java.lang.String getString()和public java.lang.String getString(java.lang.String encodeing) throws java.io.UnsupportedEncodingException。前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现了乱码现象,可以调用第二个方法,并传入 正确的字符集编码名称。 6.String getContentType()。此方法用来获得上传文件的类型,即标段字段元素描述头属性“content-type”的值,如image/jpeg。如果FileItem对象对应的是普通的表单字段,将返回null。 7.boolean isInMemory()。判断FileItem对象封装的数据是保存在内存中还是硬盘中。 8.void delete()。此方法用来清空FileItem对象中封装的主体内容,如果内容是被保存在临时文件中,该方法会把临时文件删除。 9.InputStream getInputStream()。以流的形式返回上传文件的主体内容。 10.long getSize()。返回上传文件的大小。
|
|