Java使用FTP连接到NAS读取文件信息,并将文件信息变成单向树形结构设置到对象中

news2024/9/30 21:33:02

检测NAS是否启用的FTP连接模式

在这里插入图片描述
如果这里不启用会出现下面错误提示:
MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenS

使用依赖

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>
         <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.1</version>
        </dependency>

单向树形对象

public class NasFileInfoModel {
    //上级目录
    private String parentPath;
    //当前目录
    private String path;
    //文件或文件夹名称
    private String name;
    //下级文件
    private List<NasFileInfoModel> childDir = new ArrayList<>();

    public NasFileInfoModel(String path, String name) {
        this.path = path;
        this.name = name;
    }

    public NasFileInfoModel() {
    }

    public String getParentPath() {
        return parentPath;
    }

    public void setParentPath(String parentPath) {
        this.parentPath = parentPath;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getName() {
        return name;
    }

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

    public List<NasFileInfoModel> getChildDir() {
        return childDir;
    }

    public void setChildDir(List<NasFileInfoModel> childDir) {
        this.childDir = childDir;
    }

    public void addChildDir(NasFileInfoModel childDir) {
        this.childDir.add(childDir);
    }

    @Override
    public String toString() {
        return JSONObject.toJSONString(this);
    }
}

连接与赋值方法

    @Test
    public void nasFileTest() {
        String path = "/图片素材";//指定地址目录,不指定则默认/目录
        //实例化服务访问对象
        try (Ftp ftp = new Ftp("192.168.110.69", 21, "子龙", "********.")) {
            FTPClient client = ftp.getClient();
            //将当前目录信息设置到对象中,作为第一个节点
            NasFileInfoModel nasFile = new NasFileInfoModel(path, path.replace("/", ""));
            //获取目录节点的下级文件信息
            List<NasFileInfoModel> nasFileInfoModels = childFileList(nasFile, client);
            nasFile.setChildDir(nasFileInfoModels);
            System.out.println("nasFile = " + nasFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 获取文件目录的下级文件信息
     *
     * @param parentFile 需要获取下级目录信息的,父节点目录
     * @param client     tfp连接
     * @return 传入入节点文件的下级目录集合
     */
    public List<NasFileInfoModel> childFileList(NasFileInfoModel parentFile, FTPClient client) throws IOException {
        String path = parentFile.getPath();//父目录的路径
        List<NasFileInfoModel> fileList = new ArrayList<>();
        FTPFile[] ftpFiles = client.listFiles(path);
        for (FTPFile ftpFile : ftpFiles) {
            //实例化文件信息对象,并且设置文件路径与文件名称
            NasFileInfoModel file = new NasFileInfoModel(path + "/" + ftpFile.getName(), ftpFile.getName());
            file.setParentPath(path);//设置父目录地址
            if (ftpFile.isDirectory()) {
                List<NasFileInfoModel> nasFileInfoModels = childFileList(file, client);
                file.setChildDir(nasFileInfoModels);
            }
            fileList.add(file);
        }
        return fileList;
    }

连接查询展示

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高德地图API】JS高德地图实现点标连线,高德地图实现点跟点连线,高德地图实现连线

前言 高德地图API参考&#xff1a;https://lbs.amap.com/demo/javascript-api/example/marker/custom-icon 实现各个点标的经纬度连线&#xff0c;点击点标可查看内容&#xff08;自定义的&#xff09; 效果 实现 案例实现&#xff0c;复制粘贴&#xff0c;将安全密钥和key替…

个性化联邦学习-综述

介绍阅读的三篇个性化联邦学习的经典综述文章 Three Approaches for Personalization with Applications to Federated Learning 论文地址 文章的主要内容 介绍了用户聚类&#xff0c;数据插值&#xff0c;模型插值三种个性化联邦学习的方法。 用户聚类&#xff1a; 目的&a…

工作四年,我学会了用 Idea本地调试线上服务器代码

文章目录 工作四年&#xff0c;我学会了用 Idea本地调试线上服务器代码&#x1f4c6; 一.那些辛酸的过往&#x1f4d5;二.远程debug原理远程调试分类主动连接调试&#xff1a;被动连接调试&#xff1a; &#x1f44b;三.操作步骤3.1.准备一个简单springboot程序 例如helloworld…

【带头学C++】----- 三、指针章 ---- 3.11 补充重要指针知识

1.指针的指针&#xff08;多级指针&#xff09; 指针的指针&#xff08;Pointer to Pointer&#xff09;是指一个指向指针的指针变量。也就是说&#xff0c;它存储了一个指向指针的内存地址。在C中&#xff0c;指针的指针可以用来传递多个指针参数&#xff0c;或者用于在函数内…

期中成绩发布啦

期中考试过后&#xff0c;老师们最头疼的事情之一就是成绩的录入和发布。而学生们最关心的事情之一则是如何能够快速、方便地查询到自己的成绩。那么&#xff0c;如何让学生自主查询成绩呢&#xff1f;下面就给大家介绍几种简单实用的方法。 一、使用学校官网或教务系统查询 现…

1698 - Access denied for user ‘root‘@‘192.168.229.1‘

目录 1. 问题现象 2. 问题分析及解决方法 1. 问题现象 在使用mysql连接工具连接mysql的时候如下&#xff1a; 出现了如下错误&#xff1a; 2. 问题分析及解决方法 出现这种错误一般有两种情况&#xff1a;一种是密码输入错误&#xff0c;重新检查一下密码再试一下&#xf…

后期混音效果全套插件Waves 14 Complete mac中文版新增功能

Waves 14 Complete for Mac是一款后期混音效果全套插件&#xff0c;Waves音频插件,内置混响&#xff0c;压缩&#xff0c;降噪和EQ等要素到建模的模拟硬件&#xff0c;环绕声和后期制作工具&#xff0c;包含全套音频效果器&#xff0c;是可以让你使用所有功能。Waves 14 Comple…

简述SVM

概述 SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的监督学习算法&#xff0c;用于分类和回归问题。它是一种基于统计学习理论和结构风险最小化原则的机器学习方法。 SVM的主要思想是在特征空间中找到一个最优的超平面…

智慧农业:农林牧数据可视化监控平台

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图扑…

AVL平衡树的插入

//AVL搜索树 //对数据的搜索&#xff1a; 1&#xff1a;暴力查找遍历 // 2:二叉树 有序&#xff0c;但是伴随着插入删除&#xff0c;维护成本很高 // 3&#xff1a;二叉搜索树 问题&#xff1a;在极端情况下&#xff0c;会退化成最开始的链表 // …

inne所属公司抢注“童年时光”商标仍被冻结

根据中国商标网查询&#xff0c;国家知识产权局已于2023年3月10日裁定&#xff0c;被告inne所属的南京童年时光生物技术有限公司注册的“童年时光”商标无效。随着这起保健品行业品牌资产争夺事件的发酵&#xff0c;更多的细节得到披露&#xff0c;至此&#xff0c;一个从“代理…

低代码+RPA,会发生什么?

据相关研究表明&#xff0c;每个企业员工每天至少花1-2个小时完成文件归档、数据输入等工作&#xff0c;而这些工作都是可以通过自动化的方式完成的。 如今&#xff0c;不少企业正专注于工作流程自动化&#xff0c;希望能花最少的时间完成重复性工作&#xff0c;机器人流程自动…

Python基础入门(17)----Python虚拟环境:为何要用虚拟环境、如何使用virtualenv

文章目录 在Python开发中,虚拟环境是一个独立的目录树,可以在其中安装Python模块。每个虚拟环境都有自己的Python二进制文件和一组安装的库。使用虚拟环境的主要原因是为了避免项目间的依赖冲突,允许每个项目有其特定的依赖,而不影响全局安装的模块。 为何要用虚拟环境 依…

Vue 最简单路由 页面路由 配置路由

路由安装 Vue3使用 vue-router4 Vue2使用 vue-router3 npm i vue-router3创建路由文件 配置路由规则 import Vue from vue import VueRouter from vue-router //导入路由器 Vue.use(VueRouter)import Login from ../components/Login import User from ../components/User //…

17、Python虚拟环境:为何要用虚拟环境、如何使用virtualenv

文章目录 在Python开发中,虚拟环境是一个独立的目录树,可以在其中安装Python模块。每个虚拟环境都有自己的Python二进制文件和一组安装的库。使用虚拟环境的主要原因是为了避免项目间的依赖冲突,允许每个项目有其特定的依赖,而不影响全局安装的模块。 为何要用虚拟环境 依…

Linux 进程的管道通信

文章目录 无名管道pipe有名管道 进程之间的通信&#xff1a;Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都看不到&#xff0c;所以进程之间不能相互访问&#xff0c;要交换数据必须通过…

分享68个毕业答辩PPT,总有一款适合您

分享68个毕业答辩PPT&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1trwZ8T2I2rFh59LVxTSXTw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付费甚欢…

开源DB-GPT实现连接数据库详细步骤

官方文档&#xff1a;欢迎来到DB-GPT中文文档 — DB-GPT &#x1f44f;&#x1f44f; 0.4.1 第一步&#xff1a;安装Minicoda https://docs.conda.io/en/latest/miniconda.html 第二步&#xff1a;安装Git Git - Downloading Package 第三步&#xff1a;安装embedding 模型到…

TFTP协议详解

1.简介 TFTP&#xff08;Trivial File Transfer Protocol,简单文件传输协议&#xff09;是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69。 FTP是一个传输文件的简单协议&#xff0c;它基…

亚马逊怎么下单更真实

亚马逊是一个知名的在线购物平台&#xff0c;为了下单更真实&#xff0c;可以采取以下步骤&#xff1a; 1、查看商品信息&#xff1a;在浏览亚马逊的商品时&#xff0c;仔细查看商品描述、照片和客户评价。这些信息可以帮助你了解产品的真实情况。 2、对比价格&#xff1a;比…