FTP协议实现文件列表展示、文件上传、文件下载(Java版)

目录

一、FTP协议

二、创建FTP服务器

三、文件列表展示

 四、文件上传(以图片为例)

五、文件下载


一、FTP协议

FTP(文件传输协议)是一种网络协议,它可以用来在两台计算机之间传输文件。FTP协议使用TCP/IP协议,可以在不同的操作系统之间传输文件。FTP协议可以用来上传和下载文件,也可以用来查看文件列表,删除文件,重命名文件等。

FTP的特性:

1.FTP有控制连接和数据连接。控制连接标准端口为21,用于发送FTP命令信息。数据连接标准端口为20,用于上传、下载数据。

2.FTP协议和其他协议不一样的地方就是客户端访问FTP服务器端需要建立二个TCP连接,一个用来传输FTP命令,一个用来传输数据。

3.FTP有主动模式和被动模式。主动模式:服务端从20端口主动向客户端发起连接被动模式:服务端在指定范围内的某个端口被动等待客户,被动发起连接。

二、创建FTP服务器

进入Ftpconsole,确保服务处于开启状态,记住自己电脑的主机IP(192.169.1.4)以及FTP端口号(21)。

通过Ftpconsole创建FTP服务器(选择需要操作的主目录,勾选操作对应的权限)。

三、文件列表展示

敲代码之前,将FTP协议所依赖的包commons-net-3.6.jar导入至当前项目。

下载链接:https://download.csdn.net/download/xk7298/10598379?spm=1003.2122.3001.6634.5

// 连接FTP服务器,显示文件列表
public class showFileList {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try {
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");
			// 第2步:
			boolean isChange = ftpClient.changeWorkingDirectory("list"); //切换目录
			if(isChange) {
				// 切换成功,显示liubin目录下的所有文件
				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);
					Date createDate = file.getTimestamp().getTime();
					System.out.println("创建时间:" + fmt.format(createDate));
					System.out.println("文件大小:" + file.getSize()+"字节");
				}
			}else {
				// 创建指定目录
				ftpClient.makeDirectory("list");
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 四、文件上传(以图片为例)

// 基于FTP协议的文件上传
public class uploadFile {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try (FileInputStream in = new FileInputStream("C:\\Users\\APESOURCE\\Pictures\\view.jpg")){
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");	
			// 第2步:切换至个人目录
			boolean isChange = ftpClient.changeWorkingDirectory("list");
			if(!isChange) {
				// 创建个人目录
				ftpClient.makeDirectory("list");
				// 切换
				ftpClient.changeWorkingDirectory("list");
			}
			// 第3步:文件上传
			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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

五、文件下载

//基于FTP协议的文件下载
public class downloadFile {
	public static void main(String[] args) {
		// 创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		try (FileOutputStream out = new FileOutputStream("d:\\test\\download\\"+System.currentTimeMillis()+".jpg")){
			// 第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.169.1.4",21);
			ftpClient.login("xxx", "***");
			// 第2步:切换至个人目录
			boolean isChange = ftpClient.changeWorkingDirectory("list");
			// 第3步:下载指定文件
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 文件类型
			boolean isRetrieve =  ftpClient.retrieveFile("1.jpg",out);
			System.out.println("下载成功?" + isRetrieve);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			// 断开连接
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				ftpClient = null;
			}
		}
		
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FTP 协议文件传输协议,用于在网络上传输文件Java 通过 FTPClient 类提供了 FTP 客户端的实现,可以使用该类实现 FTP 文件上传。 下面是一个实现 FTP 协议多个文件上传的示例代码: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class FTPUploader { private String server; private int port; private String user; private String password; private FTPClient ftpClient; public FTPUploader(String server, int port, String user, String password) { this.server = server; this.port = port; this.user = user; this.password = password; } public void connect() throws IOException { ftpClient = new FTPClient(); ftpClient.connect(server, port); int replyCode = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(replyCode)) { throw new IOException("FTP server refused connection."); } boolean success = ftpClient.login(user, password); if (!success) { throw new IOException("Could not login to the FTP server."); } ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); } public void disconnect() throws IOException { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } public void uploadFiles(String directory, File[] files) throws IOException { if (!ftpClient.changeWorkingDirectory(directory)) { throw new IOException("Could not change working directory to " + directory); } for (File file : files) { String filename = file.getName(); try (FileInputStream inputStream = new FileInputStream(file)) { boolean success = ftpClient.storeFile(filename, inputStream); if (!success) { throw new IOException("Could not upload file " + filename); } } } } } ``` 使用该类的示例代码如下: ```java public static void main(String[] args) throws IOException { String server = "ftp.example.com"; int port = 21; String user = "username"; String password = "password"; String directory = "/upload"; File[] files = new File[] {new File("file1.txt"), new File("file2.txt"), new File("file3.txt")}; FTPUploader uploader = new FTPUploader(server, port, user, password); uploader.connect(); uploader.uploadFiles(directory, files); uploader.disconnect(); } ``` 以上代码实现了连接到 FTP 服务器,切换到指定目录,然后上传多个文件的操作。其中,`FTPClient` 类提供了很多与 FTP 协议相关的方法,可以根据需要进行调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值