java 上传ftp服务器文件_Java 实现 FTP 服务器的文件上传和下载

本文介绍了如何使用 Java 的 Apache Commons Net 工具包实现 FTP 服务器的文件上传和下载。通过 FTPClient 类,详细讲解了连接登录、创建目录、上传文件、下载文件等关键步骤,并针对中文乱码和权限问题提出了解决方案。
摘要由CSDN通过智能技术生成

前言

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

使用

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

准备工作

引入 maven 依赖

commons-net

commons-net

3.6

ftp 服务器的连接信息

主机名

端口

用户名

密码

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

常用命令

rm -rf 目录名称

mkdir 目录名称 创建目录

touch 文件名 新建文件

cd 目录名称 切换目录

kill -9 进程ID 杀死进程

chmod 配置权限

文件上传

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

创建文件夹 mkdir 文件夹名称

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

新建文件 touch 文件名称

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

makeDirectory(path)

changeWorkingDirectory(path)

storeFile(remoteFilename, inputStream);

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

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

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

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

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

创建文件夹不能以 斜杠 “/” 开头

中文乱码问题看代码

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 自行查阅资料。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值