温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么实现FTP服务器的文件上传和下载

发布时间:2021-06-28 16:33:11 来源:亿速云 阅读:125 作者:chen 栏目:大数据

这篇文章主要讲解了“Java怎么实现FTP服务器的文件上传和下载”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现FTP服务器的文件上传和下载”吧!

前言

由于业务需求,需要实现 ftp server 的文件上传和下载功能。于是便借助了 apache 的一个工具包 commons-net。使用起来很简单,但是有些细节比较坑,特此说明一下。

使用

第三方包的核心工具类是 FTPClient ,不管是文件上传还是文件下载,都要进行连接和登录,具体会在代码中体现出来。

准备工作

引入 maven 依赖

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

ftp 服务器的连接信息

  • 主机名

  • 端口

  • 用户名

  • 密码

如果需要自己搭建和配置文件服务器,请自行百度

常用命令
    rm -rf            目录名称
    mkdir 目录名称     创建目录
    touch 文件名       新建文件
    cd 目录名称         切换目录
    kill -9 进程ID      杀死进程
    chmod              配置权限

文件上传

文件上传其实就是把我们本地的文件,放到文件服务器指定的目录下。 想象一下,如果我们此时在一台 linux 服务器上新建一个文件夹和文件,该如何操作?

  1. 创建文件夹 mkdir 文件夹名称

  2. 进入到文件夹中 cd 文件夹名称

  3. 新建文件 touch 文件名称

其实 FTPClient 实现文件上传的代码也是这个意思,其中用到的方法主要是:

  1. makeDirectory(path)

  2. changeWorkingDirectory(path)

  3. storeFile(remoteFilename, inputStream);

分别对应上面的三个步骤。

以下是完整代码,但是有几个细节需要说明:

  1. 确保登录用户拥有足够的权限,比如读写文件。

  2. makeDirectory 方法无法创建多级目录,只能一层一层创建。

  3. 创建文件失败可能是用户没有权限,也可能是目录已存在。

  4. 中文乱码问题看代码

     public static void main(String[] args) {
         FTPClient ftpClient = new FTPClient();
         try {
     	    // 1. 连接登录
     	    ftpClient.connect("主机名", 端口);
     	    boolean loginSuccessful = ftpClient.login("用户名", "密码!");
     	    System.out.println(loginSuccessful ? "登录成功" : "登录失败");
    
     	    String remotePath = "中文目录";// 上传的文件所在目录
     	    String remotePathAfterTransferCode = new String(remotePath.getBytes("utf-8"), "iso-8859-1");// 防止中文乱码
     	    String localFile = "/Users/zzz/Desktop/ftp-server/perfect.txt";// 本地待上传的文件
     	    String remoteFilename = "remoteFile.txt";// 上传后 ftp server 的文件名称
    
     	    // 2. 在 ftp server 上创建文件夹
     	    boolean makeDirSuccessful = ftpClient.makeDirectory(remotePathAfterTransferCode);
     	    System.out.println("创建文件夹是否成功? " + makeDirSuccessful);
    
     	    // 3. 切换目录
     	    boolean changeWorkingDirectorySuccessful = ftpClient.changeWorkingDirectory(remotePathAfterTransferCode);
     	    System.out.println(changeWorkingDirectorySuccessful ? "切换目录成功" : "切换目录失败");
    
     	    // 4. 上传本地文件到 ftp server
     	    boolean uploadSuccessful = ftpClient.storeFile(remoteFilename, new FileInputStream(new File(localFile)));
     	    System.out.println(uploadSuccessful ? "上传成功" : "上传失败");
    
     	    // 5. 退出登录
     	    ftpClient.logout();
         } catch (Exception e) {
     	    e.printStackTrace();
         }
    }


文件下载

文件下载也是需要用户先连接登录,然后才能下载。

核心方法就是 retrieveFile("服务器文件地址", 输出流);

具体代码如下:

public static void main(String[] args) {
    FTPClient ftpClient = new FTPClient();
    // 指定本地下载目录
    String localPath = "/Users/zzz/Desktop/ftp-server";
    try {
        ftpClient.connect("主机名", 21);
        boolean loginSuccess = ftpClient.login("用户名", "密码!");
        System.out.println(loginSuccess ? "登录成功" : "登录失败");

        // 文件下载
        File localFile = new File(localPath + File.separatorChar + "ttt.txt");
        OutputStream os = new FileOutputStream(localFile);
        boolean downloadSuccessful = ftpClient.retrieveFile("test.txt", os);

        os.close();
        System.out.println(downloadSuccessful ? "下载成功!" : "下载失败!");

        ftpClient.logout();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

总结

FTPClient 实现文件上传和下载的方法很简单易懂,只是有些细节需要注意(常见的前面已经提到),当然上述的代码只是 demo 版, 具体的需求还要去优化,比如异常处理,如何创建多级文件夹之类的,最后就是需要定制配置 FTPClient ,比如编码之类的, 具体 API 自行查阅资料。

感谢各位的阅读,以上就是“Java怎么实现FTP服务器的文件上传和下载”的内容了,经过本文的学习后,相信大家对Java怎么实现FTP服务器的文件上传和下载这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI