JAVA 访问FTP

该代码实现包括FTP客户端的连接与登录,文件的下载和发送功能。通过指定的FTP服务器IP、端口、用户名和密码建立连接,然后改变工作目录,设置文件传输类型为二进制模式。下载文件时,将FTP上的文件接收至本地;发送文件则将本地文件上传至FTP服务器。异常处理确保了操作的健壮性,并在完成后关闭FTP连接。
摘要由CSDN通过智能技术生成

1、FTP客户端连接与登录

/**
	@ IP:  FTP 服务器IP地址
	@PORT:  FTP 服务器端口
	@USERNAME:  FTP 服务器登录名称
	@PASSWORD: FTP 服务器登录密码
*/
private static FTPClient getFtpClient(String IP, Integer PORT, String USERNAME, String PASSWORD){
    FTPClient ftpClient = null;
    try {
        ftpClient = new FTPClient();
        // 连接FTP服务器
        ftpClient.connect(IP, PORT);
        //ftp端口的打开和关闭
        ftpClient.enterLocalPassiveMode();
        // 登录ftp
        ftpClient.login(USERNAME, PASSWORD);
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);  //设置传输文件类型
        int reply = ftpClient.getReplyCode();
        log.debug("login ftp reply:" + reply);
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
        }
    }catch (Exception e) {
        StringBuffer sb = new StringBuffer("登陆ftp服务器异常:" + e.toString());
        sb.append("<br>");
        sb.append("FTP地址:" + ftpConfig.getIp());
        sb.append("<br>");
        sb.append("FTP端口号:" + ftpConfig.getPort());
        sb.append("<br>");
        sb.append("FTP用户:" + ftpConfig.getUsername());
        sb.append("<br>");
        sb.append("FTP密码:" + ftpConfig.getPassword());
        log.error(sb.toString(), e);
        ftpClient = null;
    }
    return ftpClient;
}

2、下载文件

/**
	@ IP:  FTP 服务器IP地址
	@PORT:  FTP 服务器端口
	@USERNAME:  FTP 服务器登录名称
	@PASSWORD: FTP 服务器登录密码
	@PATH: 要上传至FTP的目标目录
	@Local_Path: 要上传的文件所在路径
	@filename: 要上传的文件名称
*/
public static String receive(String IP,Integer PORT,String USERNAME,String PASSWORD,String PATH, String Local_Path,String filename) {
    boolean result = false;  //接收结果
    FileOutputStream out = null;
    FTPClient ftpClient = null;
    try {
        //获得ftp客户端对象
        ftpClient = getFtpClient(IP, PORT, USERNAME, PASSWORD);
        if(ftpClient == null){
            throw new RuntimeException("ftp init fail!");
        }
        //变更ftp目录
        boolean b = ftpClient.changeWorkingDirectory(PATH);
        if(b){
            //获得本地的输出流
            File localPath = new File(Local_Path);
            if (!localPath.exists()) {
                localPath.mkdirs();
            }
            out = new FileOutputStream(localPath + File.separator + filename);
            result = ftpClient.retrieveFile(filename, out);  //接收到本地
        }else{
            //找不到目录
            throw new RuntimeException("找不到ftp目录:" + PATH);
        }
        return filename;
    } catch (Exception e) {
        throw new RuntimeException("接受文件异常,path=" + PATH + ",filename=" + filename, e);
    }
    finally{
        if(out != null){
            try {
                out.close();
            } catch (IOException e) {
                log.error("关闭本地目录异常,path=" + Local_Path, e);
            }
        }
        closeFtpClient(ftpClient);
    }
}

3、发送文件

/**
	@ IP:  FTP 服务器IP地址
	@PORT:  FTP 服务器端口
	@USERNAME:  FTP 服务器登录名称
	@PASSWORD: FTP 服务器登录密码
	@PATH: 要上传至FTP的目标目录
	@Local_Path: 要上传的文件所在路径
	@filename: 要上传的文件名称
*/
public static boolean send(String IP,Integer PORT,String USERNAME,String PASSWORD,String PATH,String Local_Path,String filename){
    boolean result = false;  //发送结果
    FileInputStream in = null;
    FTPClient ftpClient = null;
    try {
        //获得ftp客户端对象
        ftpClient = getFtpClient(IP, PORT, USERNAME, PASSWORD);
        if(ftpClient == null){
            throw new RuntimeException("ftp init fail!");
        }
        ftpClient.makeDirectory(PATH);
        //变更ftp目录
        boolean b = ftpClient.changeWorkingDirectory(PATH);
        if(b){
            //获得本地的流
            in = new FileInputStream(Local_Path + File.separator + filename);
            result = ftpClient.storeFile(new String(filename.getBytes(),"ISO-8859-1"), in);
        }else{
            //找不到目录
            throw new RuntimeException("找不到ftp目录:" + PATH);
        }
        return result;
    } catch (Exception e) {
        throw new RuntimeException("发送文件异常,path=" + PATH + ",filename=" + filename, e);
    }
    finally{
        closeFtpClient(ftpClient);
        if(in != null){
            try {
                in.close();
            } catch (IOException e) {
                log.error("关闭本地目录异常,path=" + Local_Path, e);
            }
        }
    }
}

4、FTP客户端关闭

private static void closeFtpClient(FTPClient ftpClient){
    try {
        if (ftpClient != null) {
            ftpClient.disconnect();
        }
    } catch (Exception e) {
        log.error("关闭fTP客户端异常", e);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值