FTP协议全称叫做文件传输协议,它用于在Internet上的控制文件的双向传输。在FTP的使用当中,经常会提到两个概念,“下载”和“上传”。下载文件就是从远程主机拷贝文件到自己的计算机中;上传就是从自己的计算机中拷贝到远程计算机,本篇文章将客户端和服务器同时使用一台主机进行操作。
使用FTP时,必须先登录,在FTP服务器上获得相应的权限后,才能进行上传和下载文件。也就是说,要想同哪一台 计算机传送文件,就必须具有哪一台计算机的适当授权。TCP/IP协议中,FTP标准命令TCP 端口号为21,Port方式数据端口为20。FTP的任务是从一台计算机将文件传送到另一台计算机,不受 操作系统的限制。
在进行使用FTP服务器来进行文件传输前,要先对FTP服务器的IP地址,端口,以及用户的权限进行设置。以我目前设置为例进行下边的操作。
在通过Java来进行连接FTP服务器之前先准备好相应的jar包(配置过maven中央仓库请忽略)
commons-net-3.6.jar下载地址:Central Repository: commons-net/commons-net/3.6
一、上传文件至FTP服务
(1)创建FTP客户端对象
FTPClient ftpClient = new FTPClient();
(2) 连接FTP服务器
- // 传入我们的IP地址以及服务器端口号
- ftpClient.connect("192.168.137.1", 21);
(3)登录FTP服务器
- // 输入我们在FTP服务器中配置好的用户名和密码
- ftpClient.login("admin", "admin");
(4)为确保我们的文件能够上传成功,我们在FTP服务器中切换上传目录
- if (!ftpClient.changeWorkingDirectory("upload")) {
- // 创建目录
- ftpClient.makeDirectory("upload");
-
- // 切换
- ftpClient.changeWorkingDirectory("upload");
- }
(5)设置文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
(6)上传文件
- // 要上传的文件
- File tempExcelFile = new File("D:\\IOTest\\tempFile\\data.xlsx");
-
- // 通过输入流包装
- FileInputStream in = new FileInputStream(tempExcelFile)
-
- // 使用storeFIle方法上传
- ftpClient.storeFile(tempExcelFile.getName(), in);
最终我们可以看到在FTP服务器设置的文件夹内可以查看到刚才上传的文件
二、从FTP服务器上下载文件
下载和上传类似,同样的是先进行连接、登录、设置文件类型,最后下载
具体代码实现如下:
- // 创建FTP客户端对象
- FTPClient ftpClient = new FTPClient();
-
- // 连接FTP服务器
- ftpClient.connect("192.168.137.1", 21);
-
- // 登录FTP服务器
- ftpClient.login("admin", "admin");
-
- // 设置文件类型
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
-
- // 设置要下载的文件名称
- String fileName = "java.jpg";
-
- // 创建输出流,传入要下载的位置
- FileOutputStream out = new FileOutputStream("D:\\IOTest\\load\\" + 13 + ".jpg");
-
- // 下载(调用retrieveFile()方法实现下载)
- ftpClient.retrieveFile(fileName, out);
最终,我们能看到文件已经成功的下载到本地了