Buckletime 2023-02-13 18:25 采纳率: 0%
浏览 19

FTP当前的工作目录为空

循环FTP目录,获取每个文件夹下最新的一个文件。只有第一次是正常返回,之后的循环获取不到文件信息,打印工作目录为空

img

完整方法如下:

/**
     * 获取最近的作业状态
     *
     * @return
     */
    @Override
    public Result getTaskInfo() {
        String taskDir = ftpProperties.getTaskDir();
        FTPUtil ftpUtil = new FTPUtil();
        FTPClient client = null;
        Gson gson = new Gson();
        Map<String, Object> map = new HashMap<>();
        try {
            client = ftpUtil.getFTPClient(ftpProperties.getFtpHost(), ftpProperties.getFtpPort(),
                    ftpProperties.getUserName(), ftpProperties.getPassword());
            //获取当月最新的记录文件
            String year = DateUtils.getYear().toString();
            String month = DateUtils.getMonth();
            String curr = taskDir + "/" + year + "/" + month + "/";
            client.enterLocalPassiveMode();
            FTPFile[] ftpFiles = client.listFiles(curr);
            //获取最新的数据
            for (FTPFile ftpFile : ftpFiles) {
                List<TaskInfoVo> list = new ArrayList<>();
                String filePath = curr + ftpFile.getName();
                System.out.println("dir: " + filePath);
                //切换ftp目录,避免循环中不能正常获取其他目录下的文件
                boolean change = client.changeWorkingDirectory(filePath);
                log.info("切换目录[{}] {}", filePath, change ? "成功" : "失败");
                if (!change) {
                    log.error("切换工作目录失败,路径为:{}", filePath);
                    continue;
                }
                System.out.println("当前ftp路径: " + client.printWorkingDirectory());
                client.enterLocalPassiveMode();
                FTPFile[] files = client.listFiles(filePath);
                if (files.length == 0) {
                    log.error("未查询到数据!{}", filePath);
                    continue;
                }
                FTPFile lastModifyFile = Arrays.stream(files).max(Comparator.comparing(k -> k.getTimestamp().getTimeInMillis())).get();
                log.info("[{}]最新文件:{}", ftpFile.getName(), lastModifyFile.getName());
                filePath = filePath + "/" + lastModifyFile.getName();
                InputStream ftpFileStream = ftpUtil.getFTPFileStream(client, filePath);
                JSONArray dataArr = JSONUtils.inputStreamToJsonArray(ftpFileStream);
                for (Object o : dataArr) {
                    list.add(gson.fromJson(gson.toJson(o), TaskInfoVo.class));
                }
                map.put(ftpFile.getName(), list);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("FTP文件解析异常!{}", e.getMessage());
        } finally {
            ftpUtil.closeFTP(client);
        }
        return Result.success(map);
    }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-13 21:22
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 2月13日

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音