Java基于ftp协议实现文件的上传和下载

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版权协议,转载请附上原文出处链接和本声明。