包含java通过commons的词条

本文目录一览:

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-collections-3.2.1.jar包是干什么用的

1.commons-collections 包的功能

为Java标准的Collections API提供了相当好的补充。在此基础上对其常用的数据结构操作进行了很好的封装、抽象和补充。保证性能的同时大大简化代码。

2.commons-collections 包的分类:

根据集合类型,大致将此包的类归纳为9类:

Bag — 在org.apache.commons.collections包中定义的接口,它extends java.util.Collection,而它的实现类都被放在下面的bag包中。HashBag是Bag接口的一个标准实现。而BagUtils提供一组static的方法让调用者获取经过不同装饰后的Bag实例.具体用法见代码样例

Buffer — 定义在org.apache.commons.collections包下面的接口,用于表示按一定顺序除去成员对象的collection如队列等。具体的实现类在org.apache.commons.collections.buffer 包下可以找到。最简单直接的Buffer实现类是UnboundedFifoBuffer,提供先进先出的大小可变的队列。而BoundedFifoBuffer则是对其大小进行了限制,是固定大小的先进先出队列。BlockingBuffer要在多线程的环境中才能体现出它的价值,尤其是当我们需要实现某种流水线时这个BlockingBuffer很有用:每个流水线上的组件从上游的BlockingBuffer获取数据,处理后放到下一个BlockingBuffer中依次传递。BlockingBuffer的核心特色通俗点说就是如果你向它要东西,而它暂时还没有的话,你可以一直等待直至拿到为止。PriorityBuffer则提供比一般的先进先出Buffer更强的控制力:我们可以自定义Comparator给它,告诉它怎么判定它的成员的先后顺序,优先级最高的最先走。此外还有执行类型检查的TypedBuffer、或者不可改变的UnmodifiableBuffer等等

Map — 在java.util.Map的基础上扩展的接口和类。BidiMap,直译就是双向Map,可以通过key找到value,也可以通过value找到key,这在我们日常的代码-名称匹配的时候很方便:因为我们除了需要通过代码找到名称之外,往往也需要处理用户输入的名称,然后获取其代码。需要注意的是BidiMap当中不光key不能重复,value也不可以。MultiMap,就是说一个key不在是简单的指向一个对象,而是一组对象,add()和remove()的时候跟普通的Map无异,只是在get()时返回一个Collection,利用MultiMap,我们就可以很方便的往一个key上放数量不定的对象,也就实现了一对多。LazyMap,意思就是这个Map中的键/值对一开始并不存在,当被调用到时才创建。

Collection — 用也各collection之间的类型转换。典型的是TypedCollection,它实际上的作用就是提供一个decorate方法,我们传进去一个Collection和需要的类型甄别信息java.lang.Class,它给我们创建一个全新的强类型的Collection。(暂无样例代码,以后补充)

Comparator — 提供了一些Comparator的实现类(都在org.apache.commons.collections.comparators包下面)BooleanComparator – 用于排序一组Boolean对象,指明先true还是先false;ComparableComparator – 用于排序实现了java.lang.Comparable接口的对象(我们常用的Java类如String、Integer、Date、Double、File、Character等等都实现了Comparable接口);ComparatorChain – 定义一组Comparator链,链中的Comparator对象会被依次执行;FixedOrderComparator – 用于定义一个特殊的顺序,对一组对象按照这样的自定义顺序进行排序;NullComparator – 让null值也可参与比较,可以设定为先null或者后null;

ReverseComparator – 将原有的Comparator效果反转;TransformingComparator – 将一个Comparator装饰为具有Transformer效果的Comparator。

Predicate — 它以一个Object对象为参数,处理后返回一个boolean值,检验某个对象是否满足某个条件。Commons Collections也提供了一组定义好的Predicate类供我们使用,这些类都放在org.apache.commons.collections.functors包中。当然,我们也可以自定义Predicate,只要实现这个Predicate接口即可。

Transformer — 我们有时候需要将某个对象转换成另一个对象供另一组方法调用,而这两类对象的类型有可能并不是出于同一个继承体系的,或者说出了很基本的Object之外没有共同的父类,或者我们根本不关心他们是不是有其他继承关系,甚至就是同一个类的实例只是对我们而言无所谓,我们为了它能够被后续的调用者有意义的识别和处理,在这样的情形,我们就可以利用Transformer。除了基本的转型Transformer之外,Commons Collections还提供了Transformer链和带条件的Transformer,使得我们很方便的组装出有意义的转型逻辑。

Closure — 这一组接口和类提供一个操作对象的execute方法,为我们在处理一系列对象时可以将处理逻辑分离出来。ChainedClosure可以包装一组Closure作为整体执行;IfClosure在创建时需要提供给它一个Predicate和两个Closure,执行时先做Predicate判定再决定执行哪一个Closure;SwitchClosure跟SwitchTransformer类似,根据创建时传入的Predicate组和Closure组对应执行;WhileClosure则根据创建时传入的Predicate做判断,如果为true则执行Closure,直到Predicate返回false;等等。

Iterator — java.util.Iterator接口定义了标准的Collection遍历方法,但是如果不做改变的使用它,我们得到的是从头到尾一次性的遍历。假如我们需要循环遍历,假如我们需要遍历某一段,假如我们需要遍历满足某些条件的元素,等等等等,我们就不能完全依赖于这个Iterator的标准实现了。除非我们宁可在此基础上在调用的代码中多加一些判断,不过这样的话代码就会显得混乱,时间长了就容易变得难以维护。Commons Collections的这一组Iterator为我们带来了便利。

java commons-fileupload上传问题获取文本框值的问题

enctype=”multipart/form-data”这样搞了后普通request

失效,commons-fileupload.jar版本不一样,后台写法不不一样

1.1以上版本建议这么写,一下版本自己百度

DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象

dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte

ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象

sfu.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸(单个文件大小不超过5M)

sfu.setSizeMax(20000000);// 指定一次上传多个文件的总尺寸(总文件大小不超过20M)

FileItemIterator fii = sfu.getItemIterator(request);// 解析request

List uploaditems = sfu.parseRequest(request);

for(int i=0;iuploaditems.size();i++){

FileItem item = (FileItem)uploaditems.get(i);

item.getString(“aaa”);//此处即为你想要的值,相当于request.getParameter(“aaa”);

}

java文件上传用commons-fileupload设置缓存临时文件的什么意思,有人还说Java虚拟机分配到的内存只有1

肯定和虚拟机内存有关啊!你是用io流来读写数据,那么内部肯定要为了效率使用Buffer包装流来缓存吧,假如现在要上传一个电影2g,你不设置缓存一次性上传整个文件,java虚拟机内存总共就那么大点(一般不设置只有64M)肯定要爆啊!,你平时的小Demo都只有几kb肯定不用缓存也行啦!

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/253362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-14 02:16
下一篇 2024-12-14 02: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

发表回复

登录后才能评论