JSP页面文件目录树源码(递归算法)

js|递归|算法|页面

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312"; >
<script language="JavaScript">
<!--
function MM_goToURL() { //v3.0
var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}
//-->
</script>
<link href="css/ip.css" rel="stylesheet" type="text/css">
</head>

<body topmargin = "0" leftmargin = "0" marginheight = "0" marginwidth = "0" bgcolor="#FFFFFF">
<table border="0" cellspacing="0" cellpadding="0" height="80%">
<tr><td>
</td>
</tr>
<tr valign="top">
<td height="223"> <span id="menus"></span>
<span id="view"></span>

</td>
</tr>
<tr valign="bottom">
<td> </td>
</tr>
</table>
<div align="right"></div>
</body>
<script>
/**
* 构造树,初值为0
*/
function isbrother()
{
var is=flase;

}
function tree(n) {
var id = new Array("bar","pad","<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midnodeline.gif'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>","<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midclosedfolder.gif 'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>","<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/lastnodeline.gif'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>");
if(n == 0) { // 初始化变量
n = 1;
i = 0;
s = "";
}
s += "<table border=0 cellspacing=0 cellpadding=0 >";
for(;i<tree_ar.length-1;i++) {
var k = (n >= tree_ar[i+1][0])?0:1;
if(tree_ar[i][2]==false)
{
id[2]="<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/lastnodeline.gif'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>";
}
s += "<tr id='"+id[k]+"' value="+i+"><td >"+id[k+2]+"</td><td>"+tree_ar[i][1]+"</td></tr>"; // // 构造节点,注意这里的自定义属性value。作用是简化构造节点的描述,共享参数数组信息。
if(n > tree_ar[i+1][0]) { // 若期望层次大于当前层次,结束本层次返回上一层次。
s += "</td></tr></table>";
return tree_ar[i+1][0];
}
if(n < tree_ar[i+1][0]) { // 若期望层次小于当前层次,递归进入下一层次。
s += "<tr style='display:none' ><td ";
if(tree_ar[i][2]==true)
{ //如果有下个兄弟节点,则画兄弟节点间的连线
s+="background='images/line.gif' border=0 align='absmiddle'";
}

s+="></td><td>";
var m = tree(tree_ar[++i][0]);
s += "</td></tr>";
if(m < n) { // 当递归返回值小于当前层次期望值时,将产生连续的返回动作
s += "</table>";
return m;
}
}
}
s += "</table>";
return s;
}
</script>

<script for=pad event=onclick>
// 分枝节点的点击响应
v = this.parentElement.rows[this.rowIndex+1].style;
if(v.display == 'block') {
v.display = 'none';
this.cells[0].innerHTML = "<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midclosedfolder.gif 'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>";
view.innerHTML = "";// 自行修改为参数数组定义的闭合动作
}else {
v.display = 'block';
this.cells[0].innerHTML = "<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midopenedfolder.gif 'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/open.gif 'border=0 align='absmiddle'>";
// view.innerHTML = "<b>"+tree_ar[this.value][1]+"</b>"; // 自行修改为参数数组定义的展开动作
}

/**
* 以下代码用于关闭已展开的其他分枝
* 如需自行关闭展开的分枝则从这里直接返回或删去这段代码
*/
if(! tree_ar[this.value].type) //如该节点为首次进入,则记录所在层次信息
genTreeInfo(this);
var n = 1*this.value+1;
for(i=n;i<tree_ar.length-1;i++) { // 关闭排列在当前节点之后的树
if(tree_ar[i].type == "pad") {
tree_ar[i].obj2.style.display = 'none';
tree_ar[i].obj1.cells[0].innerHTML = "<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midclosedfolder.gif 'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/close.gif 'border=0 align='absmiddle'>";
}
}
while(tree_ar[--n][0] > 1); //回溯到当前树的起点
while(--n >= 0) // 关闭排列在当前树的起点之前的树
if(tree_ar[n].type == "pad") {
tree_ar[n].obj2.style.display = 'none';
tree_ar[n].obj1.cells[0].innerHTML = "<IMG src='http://www.webjx.com/htmldata/2005-08-02/images/midclosedfolder.gif 'border=0 align='absmiddle'><IMG src='http://www.webjx.com/htmldata/2005-08-02/images/open.gif 'border=0 align='absmiddle'>";
}

/** 记录层次信息,用以简化遍历树时的复杂的节点描述 **/
function genTreeInfo(o) {
var el = o.parentElement;
for(var i=0;i<el.rows.length;i++) {
if(el.rows[i].id != "") {
tree_ar[el.rows[i].value].type = el.rows[i].id;
}
if(el.rows[i].id == "pad") {
tree_ar[el.rows[i].value].obj1 = el.rows[i];
tree_ar[el.rows[i].value].obj2 = el.rows[i+1];
}
}
}
</script>

<script for=bar event=onclick>
// 无分枝节点的点击响应
//view.innerHTML = "<b>"+tree_ar[this.value][1]+"</b>"; // // 自行修改为参数数组定义的点击动作
// 自行修改为参数数组定义的点击动作

</script>

<script for=bar event=onclick>
// 无分枝节点的点击响应
//view.innerHTML = "<b>"+tree_ar[this.value][1]+"</b>"; // \uFFFD\uFFFD\uFFFDs\uFFFDC\uFFFD\uFFFD?\uFFFDQ\uFFFD\uFFFD\uFFFD\uFFFD?\uFFFD\uFFFD?\uFFFDI\uFFFD_??\uFFFD\uFFFD
</script>

<script>
/**
* 基本参数数组,根据具体应用自行扩展
* 数据可较简单的由服务器端提供
* 列1:节点层次
* 列2:节点标题
* 列3: 有无下个兄弟节点
* 其余自行扩充
*/
tree_ar = new Array(

<%

FileTree tree=new FileTree();
String array=tree.showFileTree("E:\\");

%>
<%=array%>
new Array(1,"",false) // 为简化终止判断附加的空数据项
);

/*** 创建菜单 ***/
menus.innerHTML =tree(0);
</script>
</html>

import java.io.File;

public class FileTree {
public FileTree() {
}

/**
*
* 生成文件目录树
*
* @param path
* 目录路径
* @return 返回jsp 页面所需的目录数组(JavaScript 数组)
*
*/
/*
* 有无兄弟节点
*/
private boolean hasNexetBrother = false;
/*
* 节点层次
*/
private int index=1;

public String showFileTree(String path) {

String s = "";
File dir = new File(path);
if (dir != null && dir.isDirectory()) {
String absolutePath = dir.getAbsolutePath();

absolutePath = absolutePath.replaceAll("\\\\", "\\\\\\\\");//对'\'的处理,在JSP参数传递时'\'和空格会出现错误
absolutePath = absolutePath.replaceAll(" ", "@"); //对空格的处理 ,这时用'@'替代
s += "new Array(" + index + ",'<a href=fileList.jsp?path="
+ absolutePath + "\\\\ target=mainFrame>" + dir.getName()
+ "</a>'," + hasNexetBrother + "), ";
hasNexetBrother = false;
index++;
File[] dirs = dir.listFiles();
java.util.List list = new java.util.ArrayList();
for (int i = 0; i < dirs.length; i++) {
if (dirs[i].isDirectory()) {//去除文件.得到文件夹列表

list.add(dirs[i]);

}
}
for (int i = 0; i < list.size(); i++) {
if (i != list.size() - 1)
hasNexetBrother = true;
String dirpath = ((File) list.get(i)).getAbsolutePath();
s += showFileTree(dirpath);//对子文件夹递归处理

}
index--;
}

return s;
}
}

时间: 2024-09-17 04:43:17

JSP页面文件目录树源码(递归算法)的相关文章

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码] 开始,我们有了一系列的解决方案,我们将动手搭建新系统吧. 用户的体验已经需要越来越注重,这次我们是左右分栏,左边是系统菜单,右边是一个以tabs页组成的页面集合,每一个tab都可以单独刷新和关闭,因为他们会是一个iframe 工欲善其事必先利其器.需要用到以下工具. Visual Studio 2012 您可以安装MVC4 for vs2010用VS2010

jsp 学生信息管理系统源码

问题描述 jsp 学生信息管理系统源码 怎么写完整的 源码 求教 解决方案 JSP学生信息管理系统(全套源码+开发文档+使用手册+设计模型) http://blog.sina.com.cn/s/blog_4b5bc0110101a97r.html 解决方案二: 下载一个现成的参考下:http://download.csdn.net/detail/dsoft2008001/387430http://download.csdn.net/detail/tianbaohau/8306599http://

ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享_实用技巧

开始,我们有了一系列的解决方案,我们将动手搭建新系统吧. 用户的体验已经需要越来越注重,这次我们是左右分栏,左边是系统菜单,右边是一个以tabs页组成的页面集合,每一个tab都可以单独刷新和关闭,因为他们会是一个iframe 工欲善其事必先利其器.需要用到以下工具. Visual Studio 2012 您可以安装MVC4 for vs2010用VS2010来开发,但是貌似你将不能使用EF5.0将会是EF4.4版本,但这没有多大的关系. MVC4将挂载在.NET Framework4.5上. 好

谁能给我一个WEB版图片处理的程序源码?

问题描述 谁能给我一个WEB版图片处理的程序源码?包括JSP页面,JAVA源码,不胜感激! 解决方案 解决方案二:怎么没人回答呢?解决方案三:我估计这些出钱都很难弄到!解决方案四:flex或者flash的呢?只是简单的就行

关于 Eclipse中的Web项目 部署的文件位置 查看jsp源码的部署位置

使用 eclipse 开发web项目 会默认 部署在 工作目录下: .metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在这里 我的工作目录是 F:\work 所以 web的项目 部署的位置应该是: F:\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在使用jsp 的时候 需要查看 jsp的 对应 Servlet 源码 需要查看 .m

收藏了4年的Android 源码分享

Android 超过2个G的源代码集合~~几乎涵盖了所有功能效果的实现,一应俱全~~应有尽有~~ 360云盘地址:Android 各类源码集合汇总 (提取码:f930) 另外,附上Github上及自己整理的一些代码集合~~ Android手势处理集合框架 源码 Android 一个简单的缓存框架 源码 Android 一个流畅的PDF阅读器 源码 Android 利用精简Zxing实现条形码/二维码 扫描Demo Android 水波特效(录音功能) 源码 SlidMenu 侧滑菜单.ViewP

收藏了4年的android app源码下载

Android 超过2个G的源代码集合~~几乎涵盖了所有功能效果的实现,一应俱全~~应有尽有~~ 360云盘地址:Android 各类源码集合汇总 (提取码:f930) 另外,附上Github上及自己整理的一些代码集合~~ Android手势处理集合框架 源码 Android 一个简单的缓存框架 源码 Android 一个流畅的PDF阅读器 源码 Android 利用精简Zxing实现条形码/二维码 扫描Demo Android 水波特效(录音功能) 源码 SlidMenu 侧滑菜单.ViewP

jQuery实现导航高亮的方法【附demo源码下载】_jquery

本文实例讲述了jQuery实现导航高亮的方法.分享给大家供大家参考,具体如下: 导航是我们页面中一般都需要的一个元素,它可以说是一个站点必用的元素,没有了导航,会让人找不着北,但有时候,仅仅有了导航还不够,还需要在当前的页面中标明当前是在哪一个类别里面,这时候就有了不同的实现的方法,也就有了下文的一些介绍. 通常,我们在做导航的时候,都是由程序直接输出当前的页面的的高亮状态的样式,我们只需要定义好输出的类的高亮的样式就可以了,这样是最直接有效也是最常用的方法. 像Wordpress的导航输出,会

求jsp页面利用poi导入导出esce表格源码

问题描述 求jsp页面利用poi导入导出esce表格源码,网上很多说,但是很模糊,搞不太明白,需要一个项目来实现,最好是mvc模式的,因为我还不懂三大框架,谢谢