目录
1.打开FTPconsole.exe,记住主机IP和端口号(默认21)
2. 创建账号,设置用户名、密码和共享文件夹,勾选给予权限
一、FTP协议
1.概述
1、文件传送协议(File Transfer Protocol)是互联网上使用的最广泛的文件传输协议,用于Internet上的控制文件的双向传输。
2、FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。
3、FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中计算机之间传送文件。
2.特点
1、文件传送协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输方式。
2、FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
3、FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提提供服务,FTP的服务器进程由二大部分组成:一个是主进程,负责接受新的请求;另外有诺干个从属进程,负责处理单个请求。
3.工作过程
1、FTP有控制连接和数据连接,
控制连接标准端口为21,用于发送FTP命令信息。
数据连接标准端口为20,用于上传、下载数据。
2、FTP协议和其他协议不一样的地方就是客户端访问FTP服务器端需要建立二个TCP连接,一个用来传输FTP命令,一个用来传输数据
3、FTP有主动模式和被动模式,
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内的某各端口被动等待客户,被动发起连接。
二、创建FTP服务器
1.打开FTPconsole.exe,记住主机IP和端口号(默认21)
2. 创建账号,设置用户名、密码和共享文件夹,勾选给予权限
三、文件列表展示
导入FTP的依赖包,下载地址:http://commons.apache.org/proper/commons-net/apidocs/index.html
1.连接FTP服务器
2.切换至个人目录
代码示例如下:
//连接FTP服务器,显示文件列表
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try {
//1.连接FTP服务器并验证用户密码
ftpClient.connect("192.168.139.35",21);
ftpClient.login("admin","******");
//2.切换到要访问的目录,不存在则创建
boolean isChange = ftpClient.changeWorkingDirectory("***");
if (isChange = true){
//切换成功,显示该目录下的所有文件
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
//获取当前目录中的所有文件
FTPFile[] ftpfileList = ftpClient.listFiles();
for (FTPFile file:ftpfileList) {
String fileName = file.getName();
fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:" + fileName);
System.out.println("文件大小:" + file.getSize());
Date createDate = file.getTimestamp().getTime();
System.out.println("创建时间:" + fmt.format(createDate));
}
}else {
//创建指定目录
ftpClient.makeDirectory("***");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
四、文件上传
1.连接FTP服务器
2.切换至个人目录
3.文件上传 ftpClient.storeFile(参数1:FTP文件的保存名称, 参数2:本地文件输入流)
代码示例如下:
public class Demo2 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try (FileInputStream in = new FileInputStream("C:\\Users\\Lenovo\\Pictures\\Screenshots\\******.png")
){
//第1步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.162",21);
ftpClient.login("admin","******");
//第2步:切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("***");
if (!isChange){
//创建个人目录
ftpClient.makeDirectory("***");
//切换至个人目录
ftpClient.changeWorkingDirectory("***");
}
//第3步文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //设置文件类型
//存文件至FTP服务器
boolean isStroe = ftpClient.storeFile(System.currentTimeMillis()+ ".jpg",in); //参数1:FTP文件的保存名称 参数2:本地文件输入流
System.out.println("文件上传成功?" + isStroe);
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
五、文件下载
1.连接FTP服务器
2.切换至个人目录
3.文件上传 ftpClient.retrieveFile(参数1:FTP文件的保存名称, 参数2:本地文件输出流)
代码示例如下:
public class Demo3 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try (FileOutputStream out = new FileOutputStream("C:\\Users\\Lenovo\\Pictures\\Screenshots\\download\\" + System.currentTimeMillis() + ".jpg")) { //将文件下载至该目录
//第1步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.162", 21);
ftpClient.login("admin", "*****");
//第2步:切换至个人目录
boolean isChange = ftpClient.changeWorkingDirectory("***");
//第3步:下载指定文件
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //设置文件类型
ftpClient.retrieveFile("1688798072891.jpg",out); //参数1:FTP文件的保存名称 参数2:本地文件输出流
System.out.println("下载成功?" + isChange);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
//断开连接
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}