一、FTP协议
FTP(File Transfer Protocol)是文件传输协议,我们可以在服务器中存放大量的共享软件和免费资源,网络用户可以从服务器中下载文件,或者将客户机上的资源上传至服务器。FTP就是用来在客户机和服务器之间实现文件传输的标准协议。它使用客户/服务器模式,客户程序把客户的请求告诉服务器,并将服务器发回的结果显示出来。而服务器端执行真正的工作,比如存储、发送文件等。如果用户要将一个文件从自己的计算机发送到FTP服务器上,称为FTP的上传,而更多的情况是用户从服务器上把文件或资源传送到客户机上,称为FTP的下载。在Internet上存在有许多FTP服务器,它们往往存储了许多允许存取的文件,如:文本文件、图像文件、程序文件、声音文件、电影文件等。
二、FTP服务器的搭建
1、安装easyftp-server-1.7.0.10-cn软件
2、设置服务器
设置用户名、密码、主目录,给予操作文件的一些权限。
3、使用主机名和web服务端口号测试服务器是否能正常使用。
用户名和密码输入设置好的用户名和密码,然后就能正常访问到设置的主目录下的文件。
三、连接 FTP服务器,显示文件列表
1、创建基于FTP协议访问文件服务器的客户端对象。
2、连接FTP服务器并验证用户名和密码。
3、切换至指定的目录,如果没有该目录,则创建指定的目录。
4、切换成功后,获取当前目录中所有的文件。
5、显示指定目录下所有文件。
示例代码如下:
//连接 FTP服务器,显示文件列表
public class Demo01 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try {
//连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.164",21);
ftpClient.login("hy", "123456");
boolean isChange=ftpClient.changeWorkingDirectory("hy");
if(isChange) {
//切换成功 显示hy目录下的所有文件
SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日");
//获取当前目录中所有的文件
FTPFile[] fftpFileList=ftpClient.listFiles();
for(FTPFile file:fftpFileList) {
//文件名称中包含中文乱码
String fileName=file.getName();
fileName=new String(fileName.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:"+fileName);
Date createData=file.getTimestamp().getTime();
System.out.println("创建时间:"+fmt.format(createData));
System.out.println("文件大小:"+file.getSize()+"字节");
}
}else {
//创建指定目录
ftpClient.makeDirectory("hy");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、FTP服务器文件上传
1、创建基于FTP协议访问文件服务器的客户端对象。
2、连接FTP服务器并验证用户名和密码。
3、切换至指定的目录,如果没有该目录,则创建指定的目录并切换。
4、设置文件的类型,将文件存至FTP目录,
5、成功上传文件
示例代码如下:
public class Demo02 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try(FileInputStream in=new FileInputStream("D:\\test\\20230708\\bg.jpg")) {
//第一步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.164",21);
ftpClient.login("hy", "123456");
//第二步:切换至个人目录
boolean isChange=ftpClient.changeWorkingDirectory("huangying");
if(!isChange) {
//创建个人目录
ftpClient.makeDirectory("huangying");
//切换
ftpClient.changeWorkingDirectory("huangying");
}
System.out.println(ftpClient.printWorkingDirectory());
//第三步:文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
//存文件至FTP目录
//参数1:FTP文件的保存名称
//参数2:本地文件输入流
boolean isStore=ftpClient.storeFile(System.currentTimeMillis()+".jpg", in);
System.out.println("文件上传成功?"+isStore);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
ftpClient=null;
}
}
}
}
五、FTP服务器文件下载
1、创建基于FTP协议访问文件服务器的客户端对象。
2、连接FTP服务器并验证用户名和密码。
3、切换至指定的目录。
4、下载指定文件。
5、成功下载文件。
示例代码如下:
public class Demo03 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try(FileOutputStream out=new FileOutputStream("D:\\test\\20230708\\"+System.currentTimeMillis()+".jpg")) {
//第一步:连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.254.164",21);
ftpClient.login("hy", "123456");
//第二步:切换至个人目录
ftpClient.changeWorkingDirectory("huangying");
//第三步:下载指定文件
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
boolean isRetrieve=ftpClient.retrieveFile("bg1.jpg", out);
System.out.println("下载成功?"+isRetrieve);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
ftpClient=null;
}
}
}
}