遍历文件夹,显示列表

求助帮忙写个遍历文件夹,并在web页面上以树状结构显示文件列表,
可以的话每个文件加个点击事件显示文件路径

做的不是很好:

页面:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>文件目录</title>
    <link rel="stylesheet" href="static/bootstrap/css/bootstrap.min.css" />
    <!--使用zTree风格-->
    <link rel="stylesheet" href="static/custom/fileCatalog/css/metroStyle/metroStyle.css" />

    <script type="text/javascript" src="static/jquery/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="static/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="static/custom/fileCatalog/js/jquery.ztree.all.min.js"></script>
    <script type="text/javascript" src="static/custom/fileCatalog/fileCatalog.js"></script>
</head>
<body>
<div>
    <!-- Nav tabs -->
    <ul class="nav nav-tabs" role="tablist">
        <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li>
    </ul>
    <!-- Tab panes -->
    <div class="tab-content">
        <div role="tabpanel" class="tab-pane active" id="home">
            <ul class="ztree" id="menu"></ul>
        </div>
    </div>
</div>
</body>
</html>

js:

 /**
 * Created by wangbiao-019 on 2018/4/17.
 */
var setting = {
    view: {
        //addHoverDom: addHoverDom,
        //removeHoverDom: removeHoverDom,
        selectedMulti: false
    },
    check: {
        enable: true
    },
    data: {
        simpleData: {
            enable: true
        }
    },
    edit: {
        enable: false
    },
    callback: {
        onClick: zTreeOnClick
    }
};

var zNodes;
$.ajax({
    url:"fileCatalog/fileCatalogs",
    type:"GET",
    dataType:"json",
    success:function (data) {
        zNodes = data;
        //console.info(zNodes);
    },
    error:function (error) {
        console.info(error);
    }
});

function concatParentsPath(currNode){
    if(currNode.getParentNode() == null){
        return currNode.name;
    }else{
        return concatParentsPath(currNode.getParentNode() ) + currNode.name;
    }

}

function zTreeOnClick(e, treeId, treeNode){
    var nodes = $.fn.zTree.getZTreeObj(treeId).getSelectedNodes();
    var namePath = concatParentsPath(nodes[0]);
    $("#namePath").text(namePath);
}

function initZTree(id){
    $.fn.zTree.init($(id), setting, zNodes);
}

$(document).ready(function () {
    initZTree("#menu");
});
    //{ id: 1, pId: 0, name: "父节点1", open: true },

Controller:

 package com.example.demo.on.controller;

import com.example.demo.common.entity.Ztree;
import com.example.demo.common.util.FileCatalogUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by wangbiao-019 on 2018/4/17.
 */
@Controller
@RequestMapping("/fileCatalog")
public class FileCatalogController {
    private List<Ztree.Node> nodes;


    @GetMapping("/fileCatalogs")
    @ResponseBody
    public List<Ztree.Node> getFileCatalogs() {
        nodes = new ArrayList<Ztree.Node>();

        Ztree ztree = FileCatalogUtil.ergodicDeeply("D:/GitRespository/ideag/myspecial/src/main/java/com");

        Ztree.Node root = ztree.getRoot();

        mObj2Json(root);

        System.out.println( nodes);

        return nodes;
    }

    private void mObj2Json(Ztree.Node node){
        nodes.add(node);

        recur(node);
    }
    private void recur(Ztree.Node node){
        if(node != null && node.getSons() != null && node.getSons().size() > 0) {
            for (Ztree.Node n : node.getSons()) {
                nodes.add(n);
                recur(n);
            }
        }
    }

}

model:

 package com.example.demo.common.entity;

import java.util.List;

/**
 * Created by wangbiao-019 on 2018/4/17.
 */
public class Ztree {

    public class Node{
        int id;
        int pId;
        String name;
        boolean open;   //是否展开
        boolean isParent;   //是否是父节点
        int fileCount;
        List<Node> sons;

        public Node(){
            this.open = false;
            this.isParent = false;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public int getpId() {
            return pId;
        }

        public void setpId(int pId) {
            this.pId = pId;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public boolean isOpen() {
            return open;
        }

        public void setOpen(boolean open) {
            this.open = open;
        }

        public boolean isParent() {
            return isParent;
        }

        public void setParent(boolean parent) {
            isParent = parent;
        }

        public int getFileCount() {
            return fileCount;
        }

        public void setFileCount(int fileCount) {
            this.fileCount = fileCount;
        }

        public List<Node> getSons() {
            return sons;
        }

        public void setSons(List<Node> sons) {
            this.sons = sons;
        }

        @Override
        public String toString() {
            return "{" +
                    "\"id\":\"" + id +
                    "\", \"pId\":\"" + pId +
                    "\", \"name\":\"" + name +
                    "\", \"open\":\"" + open +
                    "\", \"isParent\":\"" + isParent +
                    "\"}";
        }
    }
    Node root;

    public Node getRoot() {
        return root;
    }
    public void setRoot(Node root) {
        this.root = root;
    }

    //
}

util:
package com.example.demo.common.util;

import com.example.demo.common.entity.Ztree;
import com.example.demo.common.entity.Ztree.Node;

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

/**

  • Created by wangbiao-019 on 2018/4/17.
    */
    public class FileCatalogUtil {
    private static int INT_START = 1;
    private static final int INT_PARENT = 0;

    public static Ztree ergodicDeeply(String path) {
    return ergodic(path, -1);
    }

    //遍历文件夹的任意深度
    // -1 表示会遍历到底,直至爆炸
    // >0 表示遍历文件夹下的n层
    // <0 return null;
    public static Ztree ergodic(String path, int deepty) {
    if (path == null || "".equals(path.trim()) || deepty == 0) {
    return null;
    } else {
    Ztree ztree = new Ztree();
    ztree.setRoot(nodefor(new File(path), ztree, deepty, INT_PARENT));
    return ztree;
    }
    }

    private static Ztree.Node nodefor(File file, Ztree ztree, int deepth, int parentId) {
    List nodes;
    Node node;
    if (file == null) {
    return null;
    } else if (deepth == 0) {
    return null;
    } else if (deepth == -1) {
    if (file.exists()) {
    node = ztree.new Node();

            node.setId(INT_START);
            node.setpId(parentId);
            try {
                if (file.isDirectory()) { //是目录
                    String path = null;
                    path = file.getCanonicalPath();
    
                    node.setName(parentId == 0 ? path : path.substring(path.lastIndexOf(File.separator)));
                    node.setParent(true);
    
                    String[] fs = file.list();
                    if (fs == null) {
                        return node;
                    } else {
                        nodes = new ArrayList<Node>();
                        for (String s : fs) {
                            File fi = new File(file.getCanonicalPath(), s);
                            INT_START++;
                            nodes.add(nodefor(fi, ztree, deepth, node.getId()));
                        }
                        node.setSons(nodes);
                    }
                } else if (file.isFile()) { //是文件
                    node.setName(file.getName());
                    INT_START++;
                } else if (file.isHidden()) { //是隐藏
                    node.setName(file.getName());
                    INT_START++;
                } else {  //其他
                    node.setName(file.getName());
                    INT_START++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            return null;
        }
    } else if (deepth > 0) {
        return null;
    } else {
        return null;
    }
    return node;
    

    }

}

是要用java还是php写呢

ckfinder你值得拥有

不能遍历本地文件夹,只能遍历服务器的文件夹,因为代码是放在服务器的,客户用浏览器去请求服务器代码,服务器代码运行后把结果返回到你的浏览器。

看看改一下
package management;

import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.text.ParseException;
import java.util.Date;

public class bro_logfile {

    /**
     * 
     * @author zdz8207
     */


    public List<String> getFileName() {
        String path = "/usr/local/bro/logs"; // 路径
        File f = new File(path);
        List<String> list =new ArrayList<String>();
        if (!f.exists()) {
            list.add(path + " not exists");

        }

        File fa[] = f.listFiles();
        for (int i = 0; i < fa.length; i++) {
            File fs = fa[i];
            if (fs.isDirectory()) {
                list.add(fs.getName() + " [文件夹]");
            } else {
                list.add(fs.getName());
            }
        }
        return list;
    }



    public String  remove(String start, String end) throws ParseException, InterruptedException, IOException{
         try {  
             Calendar c = Calendar.getInstance();
             DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");

             //开始时间必须小于结束时间

             Date beginDate =dateFormat1.parse(start);
             Date endDate =  dateFormat1.parse(end);
             Date date = beginDate;
             while (date.getTime() <= endDate.getTime()) {
             String date1=dateFormat1.format(date);
             c.setTime(date);
             c.add(Calendar.DATE, 1); // 日期加1天
             date = c.getTime();
             String cmd="rm -rf "+"/usr/local/bro/logs/"+date1;
             System.out.println(cmd);
             Runtime.getRuntime().exec(cmd); 
           }

         } catch (IOException e) {  
             e.printStackTrace();  
         }  

         String result="删除成功!";
            return result;
     }



    public static void main(String[] args) throws ParseException, InterruptedException, IOException {
        //remove("2017-04-02","2017-04-05");
        bro_logfile cs =new bro_logfile();
        String list=cs.remove("2017-06-04","2017-06-06");

        System.out.println(list);
    }
  }

需要用哪种语言写,你要遍历哪的文件,服务器上的还是本地的

遍历文件 形成一个树 每个页面展示列表

效果展示:
图片说明

不足,1.当目录结构复杂,文件多的时候需要创建很多的 Ztree的Node对象。
2. 上面的 nodefor方法在 deepth > 0 的情况下没有写,请那个啥