文章目录
FTP协议是什么?
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP
协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源,实现用户往返传输文件、目录管理以及访问电子邮件等。
一、案例要求
- 实现FTP服务器的搭建;
- 通过FTPClient类创建基于FTP协议访问文件服务器的客户端对象;
- 连接FTP服务器,实现FTP服务器文件列表展示、文件上传、文件下载;
二、案例实现
1. 实现FTP服务器的搭建;
1.1安装easyftp-server软件
1.2设置搭建服务器;
1.3用主机名和web端口号测试服务器是否能正常使用;
1.4成功通过主机名加端口号验证后访问,则表示服务器已搭建完成;
2.通过FTPClient类创建基于FTP协议访问文件服务器的客户端对象;
FTPClient类不是jdk自带的类,需要加入jar包,才能使用。
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
3. 1连接FTP服务器,实现FTP服务器文件列表展示、文件上传、文件下载:
//连接服务器并验证用户名密码
ftpClient.connect("192.168.254.133", 21);
ftpClient.login("admin", "123456");
3.2文件列表展示:
//切换到指定目录,如果该目录存在,返回true;不存在,返回false
boolean isChange =ftpClient.changeWorkingDirectory("bbb");
if(isChange) {
//设置日期格式
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
//获取当前目录中的所有文件
FTPFile[] ftpFiles = ftpClient.listFiles();
//遍历文件列表
for(FTPFile file:ftpFiles) {
//解决中文乱码
String fileName = file.getName();
fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:"+fileName);
Date creatDate = file.getTimestamp().getTime();
System.out.println("创建时间:"+fmt.format(creatDate));
System.out.println("文件大小:"+file.getSize()+"字节");
}
}else {
//目录不存在,则创建该目录
ftpClient.makeDirectory("bbb");
}
3.3文件上传:
try(
//创建本地文件输入流
InputStream in = new FileInputStream("d:\\test\\bbb\\GG-Bond.jpg")) {
ftpClient.connect("192.168.254.133",21);
ftpClient.login("admin", "123456");
//切换至个人目录
boolean isChange= ftpClient.changeWorkingDirectory("yangjia");
//如果个人目录不存在
if(!isChange) {
//创建个人目录
ftpClient.makeDirectory("yangjia");
//再次切换至个人目录
ftpClient.changeWorkingDirectory("yangjia");
}
//设置文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//存文件至FTP服务器,storeFile(FTP文件保存名称,本地文件输入流)
boolean isStore = ftpClient.storeFile("ggb.jpg", in);
}
...
注:因为是向FTP服务器中上传文件,所以在上传完毕后应断开链接!以免造成数据的丢失!
finally {
try {
//断开链接
ftpClient.disconnect();
} catch (IOException e) {
ftpClient=null;
}
}
3.4文件下载:
//创建客户端对象
FTPClient ftpClient = new FTPClient();
try(OutputStream out = new FileOutputStream("d:\\test\\bbb\\"+System.currentTimeMillis()+".jpg")) {
//连接并验证
ftpClient.connect("192.168.254.133",21);
ftpClient.login("admin", "123456");
//切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("bbb");
//文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//文件下载,retrieveFile(要下载的文件名 文件输出流)
boolean is = ftpClient.retrieveFile("3.jpg", out);
}
...
finally {
try {
//断开链接
ftpClient.disconnect();
} catch (IOException e) {
ftpClient=null;
}
}