首页 > 编程语言 >java 获取ftp文件列表以及模糊查询,并对结果进行分页

java 获取ftp文件列表以及模糊查询,并对结果进行分页

时间:2023-06-13 10:47:11浏览次数:44  
标签:ftp java String get valueOf 列表 params file ftpClient

/**
     * 获取ftp文件列表
     * ".*\\.txt" :匹配所有以".txt" 结尾的文件名。其中,星号(*)表示任意字符序列,反斜杠(\)用于转义点号(.)字符。
     * ".*" + "任意字符" + ".*\\.txt" :匹配所有包含 "表示匹配任意多个任意字符"和以".txt" 结尾的文件名。其中,星号(*)表示任意字符序列,反斜杠(\)用于转义点号(.)字符。
     * @param params
     * @return
     */
    @PostMapping("/getFTPFileList")
    @ResponseBody
    public Result getFTPFileList(@RequestBody Map<String,Object> params) {
        FTPClient ftpClient = new FTPClient();
        List<Map<String, Object>> list = new ArrayList<>();
        FTPFile[] page = new FTPFile[0];
        int pageNum = ("".equals(String.valueOf(params.get("pageNo"))) || params.get("pageNo") == null) ? 1 : Integer.valueOf(String.valueOf(params.get("pageNo")));
        int pageSize = ("".equals(String.valueOf(params.get("pageSize"))) || params.get("pageSize") == null) ? 20 : Integer.valueOf(String.valueOf(params.get("pageSize")));
        int start = (pageNum - 1) * pageSize;
        int end = start + pageSize - 1;
        try {
            System.out.println("开始连接ftp");
            ftpClient.connect(host, port);
            ftpClient.login(username, password);
//            ftpClient.connect(ip, pr);
//            ftpClient.login(user, pass);
            int reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                return Result.error("ftp连接失败:" + reply);
            }else{
                System.out.println("ftp连接成功:" + reply);
            }
            ftpClient.enterLocalPassiveMode(); //被动模式
            String p = ("".equals(String.valueOf(params.get("path"))) || params.get("path") == null) ? path : String.valueOf(params.get("path"));
            String f = ("".equals(String.valueOf(params.get("file"))) || params.get("file") == null) ? file : ".*" + String.valueOf(params.get("file")).replaceAll("_","") + ".*";
            System.out.println("正则匹配:" + f);
            FTPFile[] files = ftpClient.listFiles(p);
            //根据名称进行正则匹配文件
            Pattern filePattern = Pattern.compile(f);
            if (files == null || files.length < start) {
                return Result.success(new FTPFile[0]);
            }
            int count = Math.min(end + 1, files.length) - start;
            page = new FTPFile[count];
            //对结果进行分页
            System.arraycopy(files, start, page, 0, count);
            for (FTPFile file : page) {
                if (file.isFile() && filePattern.matcher(file.getName()).matches()) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("name", file.getName());
                    //计算大小MB
                    double megabytes = (double) file.getSize() / 1048576;
                    if (megabytes >= 1024) {
                        //计算大小G
                        megabytes = megabytes / 1024;
                        String formattedNumber = String.format("%.1f", megabytes);
                        map.put("size", formattedNumber + "G");
                    } else {
                        String formattedNumber = String.format("%.1f", megabytes);
                        map.put("size", formattedNumber + "MB");
                    }
                    list.add(map);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                ftpClient.logout();
                ftpClient.disconnect();
                System.out.println("已关闭ftp链接");
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return Result.success(list);
    

 测试结果:

  入参:path  是文件存储路径, file 是文件名称,支持模糊查询

{
    "path":"/visit",
    "file":"202305",
    "pageNum": 1,
    "pageSize": 20
}

 

标签:ftp,java,String,get,valueOf,列表,params,file,ftpClient
From: https://www.cnblogs.com/ljmm/p/17476829.html

相关文章

  • this 之谜揭底:从浅入深理解 JavaScript 中的 this 关键字(二)
    前言系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。this之谜揭底:从浅入深理解JavaScript中的this关键字(二)调用位置在理解this的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的......
  • Java中锁的使用
    目录Java提供了多种锁机制来实现多线程同步和互斥。synchronized关键字ReentrantLockReentrantReadWriteLockSemaphoreCountDownLatch以上是Java中常用的锁机制,不同的锁机制适用于不同的场景。在使用锁时,需要注意避免死锁、饥饿等问题,保证程序的正确性和效率。Java提供了多种锁机......
  • JAVA非递归生成无限级菜单树的较简代码实现。(非泛用型工具包,仅总结逻辑)
    这是一个根据列表生成一个树状结构的较简单实现。搜了搜看起来好像没多少人总结过这种实现。写上来整理一下自己的思路,请大家用用看看,应该用起来问题不大?反正我没遇到BUG。实现的时间复杂度为O(N),空间复杂度应该还是O(N)吧。不过GPT说O(1)可能是因为java的对象实现hash链表是引用而不是......
  • Java的泛型
    泛型是我们需要的程序设计手段。使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。至少在表面上看来,泛型很像C++中的模板。与Java—样,在C++中,模板也是最先被添加到语言中支持强类型集合的。但是,多年之后人......
  • Java 实战介绍 Cookie 和 Session 的区别
    HTTP是一种不保存状态的协议,即无状态协议,HTTP协议不会保存请求和响应之间的通信状态,协议对于发送过的请求和响应都不会做持久化处理。无状态协议减少了对服务压力,如果一个服务器需要处理百万级用户的请求状态,对服务器的压力无疑的是巨大的。无状态的HTTP由于其简单和易用性......
  • java实现一个接口多个实现类,并且依次调用指定方法
    接口packagecn.daenx.yhchatsdk.mytest;publicinterfaceMyInterface{/***返回-1,后面的实现类将不再执行*返回0,后面的实现类继续执行**@return*/IntegerdoSomething();}实现类实现类1packagecn.daenx.yhchatsdk.mytest;......
  • Java网络编程
    Java网络编程什么是网络编程在网络通信协议下,不同计算机上运行的程序,进行的数据传输.常见的软件架构CS:客户端/服务器BS:浏览器/服务器BS架构优缺点CS架构优缺点总结网络编程三要素IP端口号协议总结......
  • 关于进程、线程、协程的概念以及Java中的应用
    进程、线程、协程本文将从“操作系统”、“Java应用”上两个角度来探究这三者的区别。一、进程在我本人的疑惑中,我有以下3个问题。1.1为什么要引入进程?在“多道程序环境下”,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性以及不可再现性的特征,因此需要引入进程的概念......
  • nohub命令和java -jar启动Spring Boot
    1.nohub命令启动SpringBoot项目nohupjava-Xms1024m-Xmx2048m-jardemo-0.0.1-SNAPSHOT.jar1>start.out2>&1&2.java-jar启动SpringBoot项目java-Xms800m-Xmx800m-XX:PermSize=256m-XX:MaxPermSize=512m-XX:MaxNewSize=512m-jardemo-0.0.1-SNAPSHOT.jar&g......
  • nohup java -jar 启动java项目
    一、java-jara.jar&直接启动jar文件,在当前会话进程中开启一个子进程来运行程序,这个子进程会随着会话进程的结束而结束。这种情况适合短时间测试用。二、nohupjava-jara.jar&先交代一下名词:hangup(挂断),终端退出时会发送hangup信号来通知其关闭所有子进程。nohup(不挂断......