本文目錄一覽:
- 1、JAVA中commons-collections-3.2.1.jar包是幹什麼用的?
- 2、java怎麼用commons-fileupload實現上傳文件
- 3、Java利用commons-fileupload進行文件上傳中設置緩衝區和臨時文件什麼意思?請高手掃一下盲
- 4、JAVA中commons-collections-3.2.1.jar包是幹什麼用的
JAVA中commons-collections-3.2.1.jar包是幹什麼用的?
Commons項目組中的一個各種集合類和集合工具類的封裝
Commons-Collections seek to build upon the JDK classes by providing new interfaces, implementations and utilities.There are many features, including:Bag interface for collections that have a number of copies of each objectBuffer interface for collections that have a well defined removal order, like FIFOsBidiMap interface for maps that can be looked up from value to key as well and key to valueMapIterator interface to provide simple and quick iteration over mapsType checking decorators to ensure that only instances of a certain type can be addedTransforming decorators that alter each object as it is added to the collectionComposite collections that make multiple collections look like oneOrdered maps and sets that retain the order elements are added in, including an LRU based mapIdentity map that compares objects based on their identity (==) instead of the equals methodReference map that allows keys and/or values to be garbage collected under close controlMany comparator implementationsMany iterator implementationsAdapter classes from array and enumerations to collectionsUtilities to test or create typical set-theory properties of collections such as union, intersection, and closure類似C++中的Boost庫,對Java容器類型和算法的補充
java怎麼用commons-fileupload實現上傳文件
文件上傳步驟:
1. 導入jar包
common-fileupload.jar
common-io.jar
2. 上傳jsp頁面編輯
body
form action=”${pageContext.request.contextPath}/servlet/UploadHandleServlet” enctype=”multipart/form-data” method=”post”
上傳用戶:input type=”text” name=”username”br/
上傳文件1:input type=”file” name=”file1″br/
上傳文件2:input type=”file” name=”file2″br/
input type=”submit” value=”提交”
/form
/body
3. 消息提示頁面(成功or失敗)
body
${message}
/body
4. 處理文件上傳的servlet編寫
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadHandleServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到上傳文件的保存目錄,將上傳的文件存放於WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全
String savePath = this.getServletContext().getRealPath(“/WEB-INF/upload”);
//上傳時生成的臨時文件保存目錄
String tempPath = this.getServletContext().getRealPath(“/WEB-INF/temp”);
File tmpFile = new File(tempPath);
if (!tmpFile.exists()) {
//創建臨時目錄
tmpFile.mkdir();
}
//消息提示
String message = “”;
try{
//使用Apache文件上傳組件處理文件上傳步驟:
//1、創建一個DiskFileItemFactory工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
//設置工廠的緩衝區的大小,當上傳的文件大小超過緩衝區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。
factory.setSizeThreshold(1024*100);//設置緩衝區的大小為100KB,如果不指定,那麼緩衝區的大小默認是10KB
//設置上傳時生成的臨時文件的保存目錄
factory.setRepository(tmpFile);
//2、創建一個文件上傳解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//監聽文件上傳進度
upload.setProgressListener(new ProgressListener(){
public void update(long pBytesRead, long pContentLength, int arg2) {
System.out.println(“文件大小為:” + pContentLength + “,當前已處理:” + pBytesRead);
/**
* 文件大小為:14608,當前已處理:4096
文件大小為:14608,當前已處理:7367
文件大小為:14608,當前已處理:11419
文件大小為:14608,當前已處理:14608
*/
}
});
//解決上傳文件名的中文亂碼
upload.setHeaderEncoding(“UTF-8”);
//3、判斷提交上來的數據是否是上傳表單的數據
if(!ServletFileUpload.isMultipartContent(request)){
//按照傳統方式獲取數據
return;
}
//設置上傳單個文件的大小的最大值,目前是設置為1024*1024位元組,也就是1MB
upload.setFileSizeMax(1024*1024);
//設置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設置為10MB
upload.setSizeMax(1024*1024*10);
//4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個ListFileItem集合,每一個FileItem對應一個Form表單的輸入項
ListFileItem list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封裝的是普通輸入項的數據
if(item.isFormField()){
String name = item.getFieldName();
//解決普通輸入項的數據的中文亂碼問題
String value = item.getString(“UTF-8”);
//value = new String(value.getBytes(“iso8859-1″),”UTF-8”);
System.out.println(name + “=” + value);
}else{//如果fileitem中封裝的是上傳文件
//得到上傳的文件名稱,
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals(“”)){
continue;
}
//注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如: c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt
//處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf(“\\”)+1);
//得到上傳文件的擴展名
String fileExtName = filename.substring(filename.lastIndexOf(“.”)+1);
//如果需要限制上傳的文件類型,那麼可以通過文件的擴展名來判斷上傳的文件類型是否合法
System.out.println(“上傳的文件的擴展名是:”+fileExtName);
//獲取item中的上傳文件的輸入流
InputStream in = item.getInputStream();
//得到文件保存的名稱
String saveFilename = makeFileName(filename);
//得到文件的保存目錄
String realSavePath = makePath(saveFilename, savePath);
//創建一個文件輸出流
FileOutputStream out = new FileOutputStream(realSavePath + “\\” + saveFilename);
//創建一個緩衝區
byte buffer[] = new byte[1024];
//判斷輸入流中的數據是否已經讀完的標識 int len = 0;
//循環將輸入流讀入到緩衝區當中,(len=in.read(buffer))0就表示in裏面還有數據
while((len=in.read(buffer))0){
//使用FileOutputStream輸出流將緩衝區的數據寫入到指定的目錄(savePath + “\\” + filename)當中
out.write(buffer, 0, len);
}
//關閉輸入流
in.close();
//關閉輸出流
out.close(); //刪除處理文件上傳時生成的臨時文件 //item.delete(); message = “文件上傳成功!”;
}
}
}catch (FileUploadBase.FileSizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute(“message”, “單個文件超出最大值!!!”);
request.getRequestDispatcher(“/message.jsp”).forward(request, response);
return;
}catch (FileUploadBase.SizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute(“message”, “上傳文件的總的大小超出限制的最大值!!!”);
request.getRequestDispatcher(“/message.jsp”).forward(request, response);
return;
}catch (Exception e) {
message= “文件上傳失敗!”;
e.printStackTrace();
}
request.setAttribute(“message”,message);
request.getRequestDispatcher(“/message.jsp”).forward(request, response);
}
private String makeFileName(String filename){ //2.jpg
//為防止文件覆蓋的現象發生,要為上傳文件產生一個唯一的文件名
return UUID.randomUUID().toString() + “_” + filename;
}
private String makePath(String filename,String savePath){
//得到文件名的hashCode的值,得到的就是filename這個字符串對象在內存中的地址
int hashcode = filename.hashCode();
int dir1 = hashcode0xf; //0–15
int dir2 = (hashcode0xf0)4; //0-15
//構造新的保存目錄
String dir = savePath + “\\” + dir1 + “\\” + dir2; //upload\2\3 upload\3\5
if(!file.exists()){
file.mkdirs();
}
return dir;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
5.編寫web.xml文件(servlet的映射配置)
servlet
servlet-nameUploadHandleServlet/servlet-name
servlet-classme.gacl.web.controller.UploadHandleServlet/servlet-class
/servlet
servlet-mapping
servlet-nameUploadHandleServlet/servlet-name
url-pattern/servlet/UploadHandleServlet/url-pattern
/servlet-mapping
註: 網上看到的,出處找不到了,望見諒!!
Java利用commons-fileupload進行文件上傳中設置緩衝區和臨時文件什麼意思?請高手掃一下盲
我看到你的問題寫了這麼一長串,就想呵呵了
你平時讀寫文件不是要用個byte來讀取,其實這個byte數組也算是個緩衝區,只是你的緩衝區比較少,通常搞個1024
這裡的意思是, 如果你上傳了一個文件,只有5kb,那麼他不會生成文件,直接保存在內存中,給你處理
但是當你超過了這個緩衝區,它就會生成一個臨時文件再處理
還有哪裡不明白?
JAVA中commons-collections-3.2.1.jar包是幹什麼用的
apache的commons系列庫,是很多其他庫的基礎庫,比如hibernate和spring,commons-collections是通用集合庫,不過一般你寫代碼用不上,你會直接用jdk里自帶的集合類(List,Set,Map等)
原創文章,作者:OHU24,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/127572.html