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 包。