扩展--使用队列来优化递归操作完成文件下载

扩展:使用队列来优化递归操作.
	
	队列特点:先进先出.
	
	在jdk中有一个接口Queue 它有一个实现类叫LinkedList它其时就是一个队列。
	
	如果要使用队列,插入 offer  获取使用 poll
	
	
	使用队列来优化递归操作:是可以解决目录层次过多问题。
		因为:递归操作可以理解成是纵向的遍历,如果目录层次比较多,在内存中存储的数据也多,会引起溢出。
		使用队列,它是横向遍历,一层一层遍历,可以解决目录层次比较多问题。
		因为使用队列,最多时候在内存中只存储了一层的信息。
		
	最常用的就是树型结构。
<%@page import="java.io.File"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>使用递归来完成下载upload目录下所有文件</title>
</head>

<body>


	<!-- 使用递归操作 -->

	<%!//声明一个方法

	public void getFile(File file) {
		if (file.isDirectory()) {
			//是目录
			File[] fs = file.listFiles();

			for (int i = 0; i < fs.length; i++) {
				getFile(fs[i]); //递归调用
			}

		} else if (file.isFile()) {
			//是文件
			System.out.println(file.getName());
		}
	}%>


	<%
		String path = "D:\\java1110\\workspace\\day22_2\\WebRoot\\upload";
		File uploadDirectory = new File(path);

		getFile(uploadDirectory);
	%>


</body>
</html>
<%@page import="java.io.File"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>使用队列来完成下载upload目录下所有文件</title>
</head>

<body>


	<!-- 使用队列操作 -->

	<%
		String path = "D:\\java1110\\workspace\\day22_2\\WebRoot\\upload";
		File uploadDirectory = new File(path);
		//创建一个队列

		Queue<File> queue = new LinkedList<File>();

		queue.offer(uploadDirectory);

		while (!queue.isEmpty()) { //如果队列不为空
			File f = queue.poll(); //从队列中获取一个File
			
			if(f.isDirectory()){//是目录,将目录下所有文件遍历出来,存储到队列中
				File[] fs = f.listFiles();

				for (int i = 0; i < fs.length; i++) {
					queue.offer(fs[i]);
				}
			}else{
				String absolutePath=(f.getAbsolutePath());
				
				String p=absolutePath.substring(absolutePath.lastIndexOf("\\upload"));
				
				out.println("<a href='/day22_2"+p+"'>"+f.getName()+"</a><br>");
			}

		}
	%>


</body>
</html>

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页