qq_36811438 2018-03-12 14:32 采纳率: 25%
浏览 1989
已结题

javaftp下载出现阻塞问题

用ftp下载时,执行到ftpClient.retrieveFile(fileName, os); 这个方法就卡死了,在网上找了很多方法也不行, ftpClient.enterLocalPassiveMode(); 加上主动被动都不行,跪求大神帮忙解决
图片说明

  • 写回答

4条回答 默认 最新

  • chuan6752 2018-03-12 15:01
    关注

    以下为下载方法

         /**
         * 下载.
         * @param remotePath FTP目录
         * @param fileName 文件名
         * @param localPath 本地目录
         * @return Result
         * @throws IOException 
         */
        public Result download(String remotePath, String fileName, String localPath) throws IOException {
            boolean flag = true;
            Result result = null;
            // 初始化FTP当前目录
            currentPath = remotePath;
            // 初始化当前流量
            response = 0;
            // 更改FTP目录
            ftpClient.changeWorkingDirectory(remotePath);
            // 得到FTP当前目录下所有文件
            FTPFile[] ftpFiles = ftpClient.listFiles();
            // 循环遍历
            for (FTPFile ftpFile : ftpFiles) {
                // 找到需要下载的文件
                if (ftpFile.getName().equals(fileName)) {
                    System.out.println("download...");
                    // 创建本地目录
                    File file = new File(localPath + "/" + fileName);
                    // 下载前时间
                    Date startTime = new Date();
                    if (ftpFile.isDirectory()) {
                        // 下载多个文件
                        flag = downloadMany(file);
                    } else {
                        // 下载当个文件
                        flag = downloadSingle(file, ftpFile);
                    }
                    // 下载完时间
                    Date endTime = new Date();
                    // 返回值
                    result = new Result(flag, Util.getFormatTime(endTime.getTime() - startTime.getTime()), Util.getFormatSize(response));
                }
            }
            return result;
        }
    

    再建一个Result 类

     /**
     * 执行每一个动作后响应的结果,包括成功的和失败的.
     * 
     * @author hao_yujie, cui_tao
     *
     */
    public class Result {
    
        /**
         * 响应的内容.
         */
        private String response;
    
        /**
         * 响应的结果.
         */
        private boolean succeed;
    
        /**
         * 响应的时间.
         */
        private String time;
    
        /**
         * 无参的构造方法.
         */
        public Result() {
        }
    
        /**
         * 构造方法.
         * 
         * @param res 响应的内容
         */
        public Result(String res) {
            this.response = res;
        }
    
        /**
         * 构造方法.
         * 
         * @param suc 响应的结果
         * @param ti 响应的时间
         * @param res 响应的内容
         */
        public Result(boolean suc, String ti, String res) {
            this.succeed = suc;
            this.time = ti;
            this.response = res;
        }
    
        /**
         * 得到相应内容.
         * 
         * @return 相应内容
         */
        public String getResponse() {
            return response;
        }
    
        /**
         * 设置相应内容.
         * 
         * @param response 响应内容
         */
        public void setResponse(String response) {
            this.response = response;
        }
    
        /**
         * 得到相应结果.
         * 
         * @return 相应结果
         */
        public boolean isSucceed() {
            return succeed;
        }
    
        /**
         * 设置响应结果.
         * 
         * @param succeed 响应结果
         */
        public void setSucceed(boolean succeed) {
            this.succeed = succeed;
        }
    
        /**
         * 得到响应时间.
         * 
         * @return 响应时间
         */
        public String getTime() {
            return time;
        }
    
        /**
         * 设置响应时间.
         * 
         * @param time 响应时间
         */
        public void setTime(String time) {
            this.time = time;
        }
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序