美文网首页Tool程序员
Java FTP基本操作

Java FTP基本操作

作者: 小明同学的学长 | 来源:发表于2018-08-29 08:27 被阅读48次

最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容。

FTP基础

关于 FTP 基础推荐阅读《使用 Socket 通信实现 FTP 客户端程序》,其中需要特别注意的是主动模式和被动模式,这一部分在日常使用中经常被忽略,但生产环境中可能会出问题,关键在于防火墙对端口的控制。

  • 主动模式:服务器采用 21 和 20 端口,客户端采用大于 1024 的随机端口,连接指令和文件传输指令由服务端发送。
  • 被动模式:服务端采用 21 和大于 1024 的随机端口,客户端采用大于 1024 的随机端口,连接指令由客户端发送。

程序操作 FTP 过程在上面推荐的文章中有所提及,大家可以看到过程还是比较复杂的,不过好在有 apache 的 commons-net 给我们提供了相关的工具类可以使用,本文使用的是 3.6 版本。以下通过代码进行说明,此代码仅演示功能,很多地方并不完善,如果用作生产请自行修改。

Java FTP 上传

/**
 * FTP发送至目标服务器
 * @apiNote 依赖apache commons-net 包
 * @param server
 */
public static void sendToServerByFTP(String server, int port, String username, String password, 
            String encoding, String fileLocalPath, String fileRemotePath, String fileRemoteName) throws IOException {
    // 获取 FTPClient
    FTPClient ftpClient = new FTPClient();
    ftpClient.connect(server, port);
    ftpClient.login(username, password);
    int replyCode = ftpClient.getReplyCode();
    if (!FTPReply.isPositiveCompletion(replyCode)) {
        System.out.println("connected failed");
    }

    // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项
    //ftpClient.setControlEncoding(encoding);
    // 切换为本地被动模式,可以解决FTP上传后文件为空的问题,但需要服务器将FTP服务添加至防火墙白名单
    //ftpClient.enterLocalPassiveMode();

    // 切换到指定目录
    ftpClient.changeWorkingDirectory(fileRemotePath);

    // 获取文件并上传
    File file = new File(fileLocalPath);
    InputStream inputStream = new FileInputStream(file);

    //文件名为中文名且上传后出现乱码时启用此项
    //String fileName = new String(fileRemoteName.getBytes(encoding), "ISO8859-1");
    boolean flag = ftpClient.storeFile(fileRemoteName, inputStream);

    // 关闭已占用资源
    inputStream.close();
    ftpClient.logout();
}

FTP 下载

FTP 下载和上传基本步骤类似,依赖的方法由 storeFile 变为 retrieveFile

public void downloadFile(String server, int port, String username, String password, 
            String serverPath, String localPath, String fileName) throws IOException {
    // 登录
    FTPClient ftpClient = new FTPClient();
    ftpClient.connect(server, port);
    ftpClient.login(username, password);

    // 验证登录情况
    int replyCode = ftpClient.getReplyCode();
    if (!FTPReply.isPositiveCompletion(replyCode)) {
        throw new RuntimeException("登录FTP服务器失败,错误代码:" + replyCode);
    }
    
    // 切换服务器至目标目录
    ftpClient.changeWorkingDirectory(serverPath);

    // 下载文件
    File file = new File(localPath);
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    ftpClient.retrieveFile(fileName, fileOutputStream);
    
    // 关闭资源占用
    fileOutputStream.close();
    ftpClient.logout();
}

FTP 删除

public void deleteFile(String server, int port, String username, String password, 
            String serverPath, String fileName) throws IOException {
    // 登录
    FTPClient ftpClient = new FTPClient();
    ftpClient.connect(server, port);
    ftpClient.login(username, password);

    // 验证登录情况
    int replyCode = ftpClient.getReplyCode();
    if (!FTPReply.isPositiveCompletion(replyCode)) {
        throw new RuntimeException("登录FTP服务器失败,错误代码:" + replyCode);
    }

    ftpClient.changeWorkingDirectory(serverPath);

    ftpClient.deleteFile(fileName);
}

相关文章

  • Java FTP基本操作

    最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容。 FTP基础 关于 FTP 基础推荐阅读《使用...

  • FTP基本操作类

    收集一些FTP操作类,方便需要的用到。1、连接FTP服务器 2、上传 3、下载 4、删除文件 5、获取当前目录下明...

  • MAC命令行使用FTP并且实现脚本操作FTP的上传下载

    前言 FTP基本操作 安装FTP工具 使用FTP 登录 以上命令之后,按提示输入用户名和密码。当出现以下日志,表示...

  • 【java】Ftp文件操作

    1 jar包下载与导入 使用java对ftp进行操作需要使用commons-net-3.5.jar包,下载地址为h...

  • JAVA FTPClient FTP简单操作

    在项目中,经常会用到FTP服务器,这里做了一个简单的联系,基于FTPClient 对FTP文件进行操作

  • java操作FTP服务文件

    1.添加依赖 2.FtpUtil 3.注意事项:调试的时候发现调用disConnect后severlet置空了,但...

  • JavaExam

    Java基本编译操作 类,对象 类What is a Java class?➢ A template for a ...

  • (六)Kotlin 与 Java 混合开发

    一、基本互操作 1、属性读写 Kotlin 自动识别 Java Getter/Setter Java 操作 Kot...

  • 'OPTS UTF8 ON': command not unde

    背景 go 操作 ftp , 使用 github.com/jlaffaye/ftp这个库ftp server 是客...

  • 百度面试总结

    1. 数据结构 链表 基本操作 java实现 B+树 基本操作 java实现 2. 算法 回文判断 3. 多线程 ...

网友评论

    本文标题:Java FTP基本操作

    本文链接:https://www.haomeiwen.com/subject/xxfuiftx.html