Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

简介: 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~


一、用Springboot读取本地工作目录的文件和文件结构

1.1、需求介绍

       最近做项目时需要做一些云原生相关的内容,有个需求要在服务器上做临时文件夹作为工作目录,同时要将工作目录映射到docker image中和前端页面上。那么将服务器的本地工作目录渲染到前端页面上是必须要实现的部分,其中通过后端API读取本地目录,获取文件信息和文件系统层级数据是篇博客将要谈到的主要内容。

       本篇博客不讲docker、不讲云原生,想要了解这方面知识的请关注我的其他博客,不了解这些知识的不影响阅读本文。

       本文会从后端获取数据开始,还有一篇博客去讲如何通过后端获取的数据,使用el-tree将其在前端页面上渲染成美观的文件目录。

       传送门:通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称、用icon区分文件和文件夹等需求-CSDN博客

1.2、后端传递数据

1.2.1、语言框架

       Java,Springboot。

1.2.2、本地工作目录示范

       假设路径是:D:\workDirectory

       根文件夹下的文件和文件夹信息如下图所示:

image.gif 编辑

1.2.3、后端代码

①controller层

       这里是项目额外写了个JsonResult的全局类,项目的所有API都用JsonResult类型来返回相应类型,其中包括响应状态码、响应信息以及响应数据。这里按照自己的需求来,或者直接改成List<Item>类型,直接返回最终数据也不是不行。

       如下是简化的代码示范。其中WORKING_DIRECTORY是工作目录路径,是一个常量。实际应用可以和别的操作一起应用,比如上传操作执行后要重新读取一次本地目录,那么就可以在上传操作的API最后添加:

List<Item> directoryList = pythonEnvironmentalService.listDirectory(WORKING_DIRECTORY);

       然后将directoryList作为返回值的一部分返回到前端,并实时渲染。

package edu.njnu.opengms.r2.domain.environmentalConfiguration;
import edu.njnu.opengms.common.utils.JsonResult;
import edu.njnu.opengms.common.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@RestController
@RequestMapping(value = "/envs")
public class EnvironmentalConfigurationController {
    @Autowired
    PythonEnvironmentalService pythonEnvironmentalService;
    // 定义静态常量来存储工作目录的路径
    private static final String WORKING_DIRECTORY = "D:\\workDirectory";
    //...其他的api方法
    // 灵活接口,读取工作目录文件
    @GetMapping("/getWorkDirectory")
    public JsonResult getDirectory() throws IOException {
        List<Item> directoryList = pythonEnvironmentalService.listDirectory(WORKING_DIRECTORY);
        return ResultUtils.success(directoryList);
    }
}

image.gif

       按照这个例子,那么api就是ip+端口+/envs/getWorkDirectory。

②service层

       简单讲一下吧,就是拿到要访问的目录之后,先扫描一遍,如果是文件,把文件的名称记录下来,如果是文件夹,就标记为文件夹,并递归调用这个方法,继续扫描子文件夹,直到层层扫描完毕,拿到所有文件和文件夹的名称和层级关系。如果需要文件的其他信息,请自行添加,逻辑是一样的,添加到item里面就行了。

// 访问本地目录文件夹的方法
    public List<Item> listDirectory(String directory) throws IOException {
        Path path = Paths.get(directory);
        List<Item> items = new ArrayList<>();
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)){
            for (Path entry: stream) {
                boolean isDirectory = Files.isDirectory(entry);
                String name = entry.getFileName().toString();
                List<Item> children = isDirectory ? listDirectory(entry.toString()) : new ArrayList<>();
                items.add(new Item(name, children, isDirectory));
            }
        }
        return items;
    }

image.gif

③响应的数据

       写完API,最好用postman测试一下,这里请求方式是get,用postman设置好请求方式和正确的路径就可以了。

image.gif 编辑

       以上述的本地工作目录为例,通过http://127.0.0.1:8082/envs/getWorkDirectory拿到的数据就是这样的(ip和端口按照实际情况来噢):

[
        {
            "name": "clustering.py",
            "children": [],
            "directory": false
        },
        {
            "name": "data",
            "children": [
                {
                    "name": "extrapolation_results.csv",
                    "children": [],
                    "directory": false
                }
            ],
            "directory": true
        },
        {
            "name": "Dockerfile",
            "children": [],
            "directory": false
        },
        {
            "name": "extrapolation_results.csv",
            "children": [],
            "directory": false
        },
        {
            "name": "requirements.txt",
            "children": [],
            "directory": false
        },
        {
            "name": "RooftopAreaConsolidationAndCalculation.py",
            "children": [],
            "directory": false
        },
        {
            "name": "rooftop_area_360.csv",
            "children": [],
            "directory": false
        },
        {
            "name": "test",
            "children": [
                {
                    "name": "1.1.txt",
                    "children": [],
                    "directory": false
                },
                {
                    "name": "test2",
                    "children": [
                        {
                            "name": "2.1.txt",
                            "children": [],
                            "directory": false
                        }
                    ],
                    "directory": true
                }
            ],
            "directory": true
        }
    ]

image.gif

       通过postman测试没有问题之后,后端API就可以确定写好了,剩下的就是在前端进行数据渲染。具体操作和细节请关注我的其他博客。前端主要使用el-tree来渲染:Tree 树形控件 | Element Plus

二、总结

       博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

相关文章
|
19天前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
30天前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
5天前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
60 14
|
8天前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
25天前
|
Java Linux 定位技术
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
132 3
|
26天前
|
人工智能 自然语言处理 关系型数据库
不写一行代码,用MCP+魔搭API-Inference 搭建一个本地数据助手! 附所有工具和清单
还在为大模型开发的复杂技术栈、框架不兼容和工具调用问题头疼吗?MCP(Model Context Protocol servers)来拯救你了!它用统一的技术栈、兼容主流框架和简化工具调用的方式,让大模型开发变得简单高效。
425 1
|
8天前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
24天前
|
数据采集 数据挖掘 API
深挖京东商品详情 API:一键获取全维度商品数据
京东商品详情API是京东开放平台为开发者提供的关键接口,支持通过编程方式获取商品详细信息,包括基本信息、描述、规格和用户评价等。该API数据全面、实时性强、稳定性高且灵活可定制,满足多场景需求。示例代码展示了如何用Python调用此API,帮助开发者快速集成京东商品数据到自身系统中,实现高效的商品数据分析与应用开发。体验链接:c0b.cc/R4rbK2 。
|
26天前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
|
1月前
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。