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

Posted

篇首语:人勤地生宝,人懒地生草。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JSP页面文件目录树源码(递归算法)相关的知识,希望对你有一定的参考价值。

JSP页面文件目录树源码(递归算法)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  <%@ page contentType="text/; charset=gb " language="java" import="java sql *" errorPage="" %>

  <>

  <head>

  <title></title>

  <meta equiv="Content Type" content="text/;charset=gb "; >

  <script language="JavaScript">

  <!

  function MM_goToURL() //v

  var i args=MM_goToURL arguments; document MM_returnValue = false;

  for (i= ; i<(args length ); i+= ) eval(args[i]+" location= "+args[i+ ]+" ");

  

  // >

  </script>

  <link href="css/ip css" rel="stylesheet" type=text/css>

  </head>

  <body topmargin = " " leftmargin = " " marginheight = " " marginwidth = " " bgcolor="#FFFFFF">

  <table border= cellspacing=" " cellpadding=" " height= %>

  <tr><td>

  </td>

  </tr>

  <tr valign="top">

  <td height= > <span id="menus"></span>

  <span id="view"></span>

  </td>

  </tr>

  <tr valign="bottom">

  <td>&nbsp;</td>

  </tr>

  </table>

  <div align=right></div>

  </body>

  <script>

  /**

  * 构造树 初值为

  */

  function isbrother()

  

  var is=flase;

  

  function tree(n)

  var id = new Array("bar" "pad" "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >" "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >" "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >");

  if(n == ) // 初始化变量

  n = ;

  i = ;

  s = "";

  

  s += "<table border= cellspacing= cellpadding= >";

  for(;i<tree_ar length ;i++)

  var k = (n >= tree_ar[i+ ][ ])? : ;

  if(tree_ar[i][ ]==false)

  

  id[ ]="<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >";

  

  s += "<tr id= "+id[k]+" value="+i+"><td >"+id[k+ ]+"</td><td>"+tree_ar[i][ ]+"</td></tr>"; // // 构造节点 注意这里的自定义属性value 作用是简化构造节点的描述 共享参数数组信息

  if(n > tree_ar[i+ ][ ]) // 若期望层次大于当前层次 结束本层次返回上一层次

  s += "</td></tr></table>";

  return tree_ar[i+ ][ ];

  

  if(n < tree_ar[i+ ][ ]) // 若期望层次小于当前层次 递归进入下一层次

  s += "<tr style= display:none ><td ";

  if(tree_ar[i][ ]==true)

   //如果有下个兄弟节点 则画兄弟节点间的连线

  s+="background= images/line gif border= align= absmiddle ";

  s+="></td><td>";

  var m = tree(tree_ar[++i][ ]);

  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+ ] style;

  if(v display == block )

  v display = none ;

  this cells[ ] innerHTML = "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >";

  view innerHTML = "";// 自行修改为参数数组定义的闭合动作

  else

  v display = block ;

  this cells[ ] innerHTML = "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >";

  // view innerHTML = "<b>"+tree_ar[this value][ ]+"</b>"; // 自行修改为参数数组定义的展开动作

  /**

  * 以下代码用于关闭已展开的其他分枝

  * 如需自行关闭展开的分枝则从这里直接返回或删去这段代码

  */

  if(! tree_ar[this value] type) //如该节点为首次进入 则记录所在层次信息

  genTreeInfo(this);

  var n = *this value+ ;

  for(i=n;i<tree_ar length ;i++) // 关闭排列在当前节点之后的树

  if(tree_ar[i] type == "pad")

  tree_ar[i] obj style display = none ;

  tree_ar[i] obj cells[ ] innerHTML = "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >";

  

  

  while(tree_ar[ n][ ] > ); //回溯到当前树的起点

  while( n >= ) // 关闭排列在当前树的起点之前的树

  if(tree_ar[n] type == "pad")

  tree_ar[n] obj style display = none ;

  tree_ar[n] obj cells[ ] innerHTML = "<IMG src= border= align= absmiddle ><IMG src= border= align= absmiddle >";

  /** 记录层次信息 用以简化遍历树时的复杂的节点描述 **/

  function genTreeInfo(o)

  var el = o parentElement;

  for(var i= ;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] obj = el rows[i];

  tree_ar[el rows[i] value] obj = el rows[i+ ];

  

  

  

  </script>

  <script for=bar event=onclick>

  // 无分枝节点的点击响应

  //view innerHTML = "<b>"+tree_ar[this value][ ]+"</b>"; // // 自行修改为参数数组定义的点击动作

  // 自行修改为参数数组定义的点击动作

  </script>

  <script for=bar event=onclick>

  // 无分枝节点的点击响应

  //view innerHTML = "<b>"+tree_ar[this value][ ]+"</b>"; // \\uFFFD\\uFFFD\\uFFFDs\\uFFFDC\\uFFFD\\uFFFD?\\uFFFDQ\\uFFFD\\uFFFD\\uFFFD\\uFFFD?\\uFFFD\\uFFFD?\\uFFFDI\\uFFFD_??\\uFFFD\\uFFFD

  </script>

  <script>

  /**

  * 基本参数数组 根据具体应用自行扩展

  * 数据可较简单的由服务器端提供

  * 列 节点层次

  * 列 节点标题

  * 列 : 有无下个兄弟节点

  * 其余自行扩充

  */

  tree_ar = new Array(

  <%

  FileTree tree=new FileTree();

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

  %>

  <%=array%>

  new Array( "" false) // 为简化终止判断附加的空数据项

  /*** 创建菜单 ***/

  menus innerHTML =tree( );

  </script>

  </>

  import java io File;

  public class FileTree

  public FileTree()

  /**

  *

  * 生成文件目录树

  *

  * @param path

  * 目录路径

  * @return 返回jsp 页面所需的目录数组(JavaScript 数组)

  *

  */

  /*

  * 有无兄弟节点

  */

  private boolean hasNexetBrother = false;

  /*

  * 节点层次

  */

  private int index= ;

  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 = ; i < dirs length; i++)

  if (dirs[i] isDirectory()) //去除文件 得到文件夹列表

  list add(dirs[i]);

  

  

  for (int i = ; i < list size(); i++)

  if (i != list size() )

  hasNexetBrother = true;

  String dirpath = ((File) list get(i)) getAbsolutePath();

  s += showFileTree(dirpath);//对子文件夹递归处理

  

  index ;

  return s;

  

cha138/Article/program/Java/JSP/201311/20339

相关参考