Vue+Java实现在页面树形展示文件目录
getInfo.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /** * @author Sue * @create 2019-07-16 15:06 **/ @RestController public class getInfo { static StringBuilder buf = new StringBuilder(); StringBuilder sb = new StringBuilder(); int kai = 0 ; public void println() { System.out.println(buf); } public void scan(String path) { File f = new File(path); if (!f.getName().startsWith( "." )) { if (f.isDirectory()) { scan( new File(path)); buf.delete(buf.length() - 2 , buf.length()); } else { System.out.format( "{\"label\" : \"%s\"}" , f.getName() + "FFFFFFFFFFFFFFF" ); } } } private void scan(File f) { if (!f.getName().startsWith( "." )) { if (f.isDirectory() && f.listFiles().length != 0 ) { buf.append(space(kai)).append( "{\n" ).append(space(++kai)).append( "\"label\" : \"" ).append(f.getName()).append( "\",\n" ).append(space(kai)) .append( "\"children\" : [\n" ); kai++; Arrays.asList(f.listFiles()).forEach( this ::scan); buf.delete(buf.length() - 2 , buf.length()); buf.append( "\n" ).append(space(--kai)).append( "]\n" ).append(space(--kai)).append( "},\n" ); } else { buf.append(space(kai)).append( "{\n" ).append(space(++kai)).append( "\"label\" : \"" ).append(f.getName()).append( "\"\n" ).append(space(--kai)) .append( "},\n" ); } } } public String space( int kai) { if (kai <= 0 ) { return "" ; } char [] cs = new char [kai << 1 ]; Arrays.fill(cs, ' ' ); return new String(cs, 0 , cs.length); } @GetMapping ( "/getInfo" ) public Map getInfo(){ HashMap<String, Object> stringObjectHashMap = new HashMap<>(); getInfo d = new getInfo(); d.scan( "D:\\usr" ); stringObjectHashMap.put( "res" , "[" + buf + "]" ); return stringObjectHashMap; } } |
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | < script src="https://unpkg.com/vue/dist/vue.js"></ script > < script src="https://unpkg.com/element-ui@2.10.1/lib/index.js"></ script > < style type="text/css"> @import url("https://unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css"); </ style > < body > < div id="app"> < el-tree :data="data" :props="defaultProps" show-checkbox @node-click="handleNodeClick"></ el-tree > </ div > </ body > < script > var Main = { data() { return { data: [{ label: '一级 1', children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }] }, { label: '一级 2', children: [{ label: '二级 2-1', children: [{ label: '三级 2-1-1' }] }, { label: '二级 2-2', children: [{ label: '三级 2-2-1' }] }] }, { label: '一级 3', children: [{ label: '二级 3-1', children: [{ label: '三级 3-1-1' }] }, { label: '二级 3-2', children: [{ label: '三级 3-2-1' }] }] }], defaultProps: { children: 'children', label: 'label' } }; }, beforeMount() { //1.获得xhr对象 if (XMLHttpRequest) { var xhr = new XMLHttpRequest(); } else { var xhr = new ActiveXObject("Microsoft.XMLHTTP"); } //2. 建立连接 xhr.open("get", "Http://99.48.59.105:8080/getInfo", true); //是否携带跨域信息 xhr.withCredentials = true; //返回数据格式 xhr.responseType = 'json'; // var vm = this; //3. 设置请求状态回调函数 xhr.onreadystatechange = function () { //如果请求完成,且成功! console.log(xhr.readyState,xhr.status) if (xhr.readyState == 4 && xhr.status == 200) { // 成功回调 if (xhr.responseType.toLowerCase() !== "json") { //如果服务器端响应类型不是json,则调用后续resolve操作,并传入原始responseText,做后续处理 vm.data = xhr.responseText; } else { //如果服务器端响应类型是json,则自动调用JSON.parse转为js对象,再交给resolve函数做后续处理 vm.data = JSON.parse(xhr.response.res); } } } //4.只有type为post,才需要设置请求头 //if (type.toLowerCase() == "post") // xhr.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded'); //'application/json' //5.只有type为post,才需要send时,传入参数 xhr.send(null); }, methods: { handleNodeClick(data) { console.log(data); } } }; var Ctor = Vue.extend(Main) new Ctor().$mount('#app') </ script > |
页面展示效果如下:
本博客文章均已测试验证,欢迎评论、交流、点赞。
部分文章来源于网络,如有侵权请联系删除。
转载请注明原文链接:https://www.cnblogs.com/sueyyyy/p/11196165.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix