isFile()){44//列出该目录下的所有文件和目录45File files[] = file。listFiles();46//遍历files[]数组47for(File f : files){48//递归49listfile(f,map);50}51}else{52/**53* 处理文件名,上传后的文件是以uuid_文件名的形式去重新命名的,去除文件名的uuid_部分54file。getName()。indexOf("_")检索字符串中第一次出现"_"字符的位置,如果文件名类于:9349249849-88343-8344_阿_凡_达。avi55那么file。getName()。substring(file。getName()。indexOf("_")1)处理之后就可以得到阿_凡_达。avi部分56*/57String realName = file。getName()。substring(file。getName()。indexOf("_")1);58//file。
getName()得到的是文件的原始名称,这个名称是唯一的,因此可以作为key,realName是处理过后的名称,有可能会重复59map。put(file。getName(), realName);60}61}6263public void doPost(HttpServletRequest request, HttpServletResponse response)64throws ServletException, IOException {65doGet(request, response);66}67 }
这里简单说一下ListFileServlet中listfile方法,listfile方法是用来列出目录下的所有文件的,listfile方法内部用到了递归,在实际开发当中,我们肯定会在创建一张表,里面会存储上传的文件名以及文件的具体存放目录,我们通过查询表就可以知道文件的具体存放目录,是不需要用到递归操作的,这个例子是因为没有使用存储上传的文件名和文件的具体存放位置,而上传文件的存放位置又使用了散列算法打散存放,所以需要用到递归,在递归时,将获取到的文件名存放到从外面传递到listfile方法里面的Map集合当中,这样就可以保证所有的文件都存放在同一个Map集合当中。
在Web.xml文件中配置ListFileServlet
1 <servlet>2<servlet-name>ListFileServlet</servlet-name>3<servlet-class>me.gacl.web.controller.ListFileServlet</servlet-class>4 </servlet>5 6 <servlet-mapping>7<servlet-name>ListFileServlet</servlet-name>8<url-pattern>/servlet/ListFileServlet</url-pattern>9 </servlet-mapping>
展示下载文件的listfile.jsp页面如下:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@taglib prefix="c" uri="" %> 3 <!DOCTYPE HTML> 4 <html> 5 <head> 6<title>下载文件显示页面</title> 7 </head> 89 <body>10<!-- 遍历Map集合 -->11<c:forEach var="me" items="${fileNameMap}">12<c:url value="/servlet/DownLoadServlet" var="downurl">13<c:param name="filename" value="${me.key}"></c:param>14</c:url>15${me.value}<a href="${downurl}">下载</a>16<br/>17</c:forEach>18 </body>19 </html>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-52904-7.html
你他喵的事看热闹不嫌事大
使劲骂