FTP当前的工作目录为空

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

img

完整方法如下:

/**
     * 获取最近的作业状态
     *
     * @return
     */
    @Override
    public Result getTaskInfo() {
        String taskDir = ftpProperties.getTaskDir();
        FTPUtil ftpUtil = new FTPUtil();
        FTPClient client = null;
        Gson gson = new Gson();
        Map 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 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);
    }