斩天堑 2018-12-10 03:00 采纳率: 0%
浏览 426

线程池上传文件至FTP服务器失败

private void uploadFileToFtp(List fileNameList) {
final FTPClient ftpClient = new FTPClient();
// 创建线程池
ThreadPoolExecutor executors = new ThreadPoolExecutor(2, 3, 60, TimeUnit.SECONDS,
new LinkedBlockingQueue(), new RejectHandler());
boolean isOver = false;
try {
ftpClient.connect("22.46.93.22", 21);
ftpClient.login("hqmis", "hqmis@123");
// 设置上传文件路径
String ftp_path = "/home/hqmis/upload/Files";
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
ftpClient.disconnect();
}
// 查看路径是否存在
boolean flag = ftpClient.changeWorkingDirectory(ftp_path);
if (!flag) {
ftpClient.makeDirectory(ftp_path);
}
// ftpClient.enterLocalPassiveMode();
// 指定上传路径
ftpClient.changeWorkingDirectory(ftp_path);

        // 指定上传文件类型 二进制
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        for (final String fileName : fileNameList) {
            executors.execute(new Runnable() {

                @Override
                public void run() {
                    // 读取本地文件
                    File file = new File(fileName);
                    InputStream inputStream = null;
                    try {
                        inputStream = new FileInputStream(file);
                        boolean store = ftpClient.storeFile(file.getName(), inputStream);
                        System.out.println(store);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            inputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    // 删除本地文件
                    file.delete();
                }
            });
        }
        executors.shutdown();
        // 判断线程池任务是否全部执行完成
        while (true) {
            if (executors.isTerminated()) {
                isOver = true;
                ftpClient.logout();
                System.out.println("线程池执行完毕");
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (isOver && ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

利用线程池上传,ftpClient.storeFile(file.getName(), inputStream);方法一直返回false,请大神帮忙看看代码哪边需要改动呢?
  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-21 01:55
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错