java 文件列表_JavaWeb文件下载列表的实现

下载文件

创建获取文件列表Servlet,首次访问时request中没有目录参数,需要给个默认目录。遍历该目录下文件,创建对应的文件对象(包含文件名,文件/文件夹,绝对路径等属性),添加到List中,并把List保存到域中。转发到文件列表jsp中

private static List fileList = new ArrayList<>();

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取参数中的filePath

String filePath = request.getParameter("filePath");

//如果参数中没有filePath,说明是首次访问,设置filePath为根目录

if (filePath == null || filePath.isEmpty()) {

filePath = "D:/download";

}

//判断是否是根目录,并保存在域中,用于判断是否显示返回按钮

if (filePath.equalsIgnoreCase("D:/download") || filePath.equalsIgnoreCase("D:\\download")) {

request.setAttribute("isRoot", true);

}else {

request.setAttribute("isRoot", false);

}

File file = new File(filePath);

//在域中保存上级目录,用于返回上级目录

request.setAttribute("parent", file.getParentFile());

File[] files = file.listFiles();

//先清空List再想List中添加该目录下遍历出来的文件

fileList.clear();

if (files != null && files.length > 0) {

for (File file2 : files) {

//创建自定义的保存文件关键属性的对象

FileJavaClass fileJavaClass = new FileJavaClass();

//保存文件的名字

fileJavaClass.setName(file2.getName());

//保存文件的绝对路径

fileJavaClass.setPath(file2.getPath());

//保存文件是文件或文件夹,用于判断文件的操作是打开还是下载

fileJavaClass.setIsFile(file2.isFile());

//添加到List中

fileList.add(fileJavaClass);

}

}

//List保存到域中

request.setAttribute("fileList", fileList);

//转发到文件列表jsp中

request.getRequestDispatcher("/downloadlist.jsp").forward(request, response);

}

创建展示文件列表jsp

返回

编号文件名操作
${vs.count}${v.name}

下载

打开

创建下载Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取文件路径参数

String filePath = request.getParameter("filePath");

//获取文件名,用于给响应头设置默认文件名

String fileName = request.getParameter("fileName");

//根据文件的路径创建输入流

InputStream in = new FileInputStream(filePath);

//处理文件名

fileName = URLEncoder.encode(fileName, "utf8");

//下载文件需要给响应头设置参数

response.setHeader("content-disposition", "attachment;fileName=" + fileName);

//获取输出流

ServletOutputStream out = response.getOutputStream();

byte[] buff = new byte[1024];

Integer length = -1;

while((length = in.read(buff)) != -1) {

out.write(buff, 0, length);

}

in.close();

out.close();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值