java中使用commons(JAVA中使用泛型的優點)

本文目錄一覽:

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-tw/n/127572.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OHU24的頭像OHU24
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論