FTP协议:
相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。
FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。
FTP服务器:
本篇文章使用easyftp-server
创建用户并设置操作目录以及文件的操作权限:
需要导入的jar包 :
文件上传至FTP服务器:
具体代码实现如下:
public class demo01 {
public static void main(String[] args) {
// FTP客户端对象
FTPClient ftpClient = new FTPClient();
try {
// 连接并登录
ftpClient.connect("192.168.188.1", 21);
ftpClient.login("root", "root");
// 切换至工作目录
boolean isChange = ftpClient.changeWorkingDirectory("1");
System.out.println("切换目录:" + isChange);
// 日期格式化转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 获取该目录下的所有文件
FTPFile[] files = ftpClient.listFiles();
for (FTPFile f : files) {
System.out.println("文件名称:" + f.getName());
// 获取文件创建时间
Date CreateDate = f.getTimestamp().getTime();
// 日期格式化
String createDate = sdf.format(CreateDate);
System.out.println("创建时间" + createDate);
// 文件大小
System.out.println("文件大小" + f.getSize());
// 上传用户
System.out.println("上传用户" + f.getUser());
System.out.println();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 断开连接
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ftp客户端web网页:
下载FTP服务器指定目录的某个文件:
public class demo02 {
public static void main(String[] args) {
String downloadFileName = "giao.jpg ";
FTPClient ftpClient = new FTPClient();
try (FileOutputStream out = new FileOutputStream("C:\\test\\" + downloadFileName);) {
ftpClient.connect("172.20.10.3", 21);// 连接
ftpClient.login("root", "root");// 登录
ftpClient.changeWorkingDirectory("1");// 切换目录
// 下载文件(获取FTP服务器指定目录(1)的文件)
// 参数1:服务器指定文件
// 参数2:本地输出流(负责下载后写入)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
Boolean isRetrieve = ftpClient.retrieveFile(downloadFileName, out);
System.out.println("下载成功" + isRetrieve);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
下载文件路径如下:
版权声明:本文为zzz11120原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。