一、简述
FTP是英文“File Transfer Protocol”的缩写,意为“文件传输协议”。FTP是一种用于文件传输的标准网络协议,定义了文件在网络上的传输方式。FTP协议通常用于将文件从一个主机移动到另一个主机,例如将网站上的文件上传到服务器。用户使用FTP客户端软件连接到FTP服务器,通过用户名和密码进行身份验证,并对文件进行上传、下载、删除、重命名等操作。FTP协议通常使用21号端口进行通信。FTP是Internet上最古老、使用最广泛的文件传输协议之一,而且FTP客户端软件在各种操作系统和设备上都有不同的版本和实现方式。
二、案例
2.1文件查看
package IO.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws Exception{
//创建基于FTP访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
//第一步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.177",21);
ftpClient.login("zhuo","123456");
//第二步:切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("liangxuhui");
if (isChange) {
//切换成功:显示liangxuhui目录下的所有文件
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");//设置日期格式
FTPFile[] ftpFileList = ftpClient.listFiles();
for (FTPFile file : ftpFileList) {
String fileName = file.getName();
fileName = new String(fileName.getBytes("utf-8"));//中文乱码
System.out.println("文件名称:" + fileName);
Date createDate = file.getTimestamp().getTime();
System.out.println("创建时间:" + fmt.format(createDate));
System.out.println("文件大小:" + file.getSize() + "字节");
}
}else {
//切换失败,创建该文件夹
ftpClient.makeDirectory("liangxuhui");
}
ftpClient.disconnect();//断开连接
}
}
2.2文件上传
package IO.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.FileInputStream;
public class Test2 {
public static void main(String[] args) throws Exception{
//创建基于FTP访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
//第一步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.177",21);
ftpClient.login("zhuo","123456");
//第二步:切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("liangxuhui");
if (!isChange){
//创建个人文目录
ftpClient.makeDirectory("liangxuhui");
//切换
ftpClient.changeWorkingDirectory("liangxuhui");
}
//第三步:文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
FileInputStream in = new FileInputStream("d:\\test\\R-C.jpg");
boolean isStore = ftpClient.storeFile(System.currentTimeMillis() + ".jpg", in);//参数:(FTP文件的保存名称,输入流)
System.out.println(isStore);
ftpClient.disconnect();
}
}
2.3文件下载
package IO.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.FileOutputStream;
public class Test3 {
public static void main(String[] args) throws Exception{
//创建基于FTP访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
//第一步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.177",21);
ftpClient.login("zhuo","123456");
//第二步:切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("liangxuhui");
//第三步:下载指定文件
FileOutputStream outputStream = new FileOutputStream("d:\\test\\"+System.currentTimeMillis()+".jpg");//输出流
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型
boolean isRetrieve = ftpClient.retrieveFile("1688797567457.jpg", outputStream);//参数:(下载文件名,输出流)
System.out.println(isRetrieve);
ftpClient.disconnect();//断开连接
}
}
三、总结
FTP协议包括服务器端和客户端,本博客通过对服务器端文件的查看、上传和下载三方面进行了简单功能的实现,展示了FTP协议是如何基于TCP协议实现的。