java实现文件的下载

12 篇文章 0 订阅
文件的下载:

获取指定目录下的所有文件的名字

FileNameServlet.java文件的内容:


package com.test.servlet;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileNameServlet extends HttpServlet{

/**
*
*/
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<String> fileList = getFileName("F:\\学习笔记");//指定文件存放位置
request.setAttribute("lists", fileList);//设置到request中
request.getRequestDispatcher("list.jsp").forward(request, response);//将请求转发
}
/**
* 列出path路径下可以下载的文件名
* @param path
* @return
*/
public static List<String> getFileName(String path){
List<String> fileNames =new ArrayList<String>();
File source = new File(path);
if(source.isDirectory()&&source.exists()){//判断是否存在以及是否是一个目录
File[] files = source.listFiles();
for(File file:files){
fileNames.add(file.getName());//获得文件目录
}
}
return fileNames;
}
}



DownloadServlet.java内容如下:


package com.test.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends HttpServlet{

/**
*
*/
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String serverPath = "F:\\学习笔记";
//String fileName = request.getParameter("filename");
String fileName = new String(request.getParameter("filename").getBytes("ISO-8859-1"), "utf-8");//get提交的方式去乱码
String fullPath = serverPath + "\\" + fileName;
System.out.println(fullPath);
File file = new File(fullPath);
//设置相应头,
//attachment是以附件的方式下载,并且文件名为filename后面的字符串的值
response.setHeader("content-disposition", "attachment;filename="+ new String(fileName.getBytes("utf-8"), "ISO-8859-1"));
InputStream in = null;
OutputStream output = null;
try {
in = new FileInputStream(file);
int length = 0;
byte buffer[] = new byte[1024];
output = response.getOutputStream();
while ((length = in.read(buffer)) != -1) {// 如果使用in.read()方法,仅仅可以下载到文件,而不能得到文件的内容
output.write(buffer, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
output.close();
}
}

}



list.jsp文件的内容如下:


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<body>
<%
List<String> fileNames =(List<String>) request.getAttribute("lists");
for(String name:fileNames){
%>
<a href="downloadServlet?filename=<%=name %>"><%=name%></a><br/>
<%
}
%>
</body>


web.xml文件的内容如下:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>fileNameServlet</servlet-name>
<servlet-class>com.test.servlet.FileNameServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileNameServlet</servlet-name>
<url-pattern>/fileNameServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>downloadServlet</servlet-name>
<servlet-class>com.test.servlet.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>downloadServlet</servlet-name>
<url-pattern>/downloadServlet</url-pattern>
</servlet-mapping>
</web-app>



当在浏览器地址栏中输入:http://localhost:8080/fileDownLoad/fileNameServlet
界面如下:

[img]http://dl.iteye.com/upload/attachment/0083/0774/16e8e2e1-f2c9-3de4-b42b-8e8a8a1d3fea.jpg[/img]

当点击其中一个连接下载时就会下载该文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值