JSP 中的文件操作
数据流
流,是一个生产或消费信息的逻辑实体,其通过输入/输出系统和物理设备相连,虽然连接的物理设备不尽相同,但流的工作方式是相同的。
数据流,分为字节流和字符流。
字节流,处理单元为 1 个字节,定义了 InputStream 和 OutputStream 顶层抽象类。
字符流,处理单元为 2 个字节的 Unicode 字符,定义了 Reader 和 Writer 顶层抽象类。
File 类
如果要处理文件系统中文件的诸如权限、创建时间、所在路径等相关文件本身的属性,可以使用 File 类。即,该类并不会指定信息怎样从文件中读取或如何存储到文件中,而只是描述文件本身的属性。
在 JSP 中使用该类,导入相应的类库即可:<%@ page import="java.io.*" %>
如下代码,简单的判断文件夹 text 是否存在,如果存在就删除,否则就创建。
<%
String path = request.getServletContext().getRealPath("/");
path = path + "text";
File d = new File(path);
if (d.exists()) {
d.delete();
out.println("delete file text");
}else {
d.mkdir();
out.println("directory create "+d.getAbsolutePath());
}
%>
如果要读写文件,可以使用 FileReader 和 FileWriter 类,创建实例对象时,可以提供一个文件的路径,也可以提供一个 File 实例对象。
在 JSP 中可以直接获取需要的字节流或字符流。
<%
request.getReader();
request.getInputStream();
response.getWriter();
response.getOutputStream();
%>
文件上传及下载
在使用 form 表单进行文件的上传及下载时,使用的是字节流。
<form action="upload.jsp" method="post" enctype="multipart/form-data">
<input type="file" size="30" />
<input type="submit" value="开始上传"/>
</form>
上传的过程是从 request 中获取字节输入流,读取上传的数据,而后创建文件输出流(FileOutputStream),将读取的数据写到指定位置。
下载的过程是创建文件输入流(FileInputStream)读取指定文件的数据,而后将其写入通过 response 获取的字节输出流中。
也可以使用 jspSmartUpload 包来实现文件的上传及下载,可参见博文。
对于大文件或多文件上传,可以使用 Commons-FileUpload
组件,可以去官网下载相应的 commons-fileupload.jar、commons-io.jar 包。