基于FTP协议的上传与下载

基于FTP协议的上传与下载

1.什么是FTP协议

FTP是一种可以用来在网络上传输文件的协议。它分为客户端和服务器端,通常用于从客户端把文件传输到服务器端或者从服务器端下载文件到客户端。FTP协议带有外传输控制信息的功能,可以使用户对传输进行控制。主要的工作流程是:先建立控制连接,认证用户身份,然后建立数据连接进行文件传输。FTP的进程和属进程各自有各自的作用,主进程负责交互,属进程负责具体的数据传输。

2、基于FTP协议的上传与下载文件
1、打开FTP服务器
2、创建访问FTP服务器的客户端
FTPClient ftpClient = new FTPClient();
3、通过客户端访问FTP服务器并且验证用户名密码

用户名和密码均正确才能正常访问FTP服务器

// 连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.180.1", 21);
ftpClient.login("coco", "123456");
4、通过客户端访问服务器当前目录中的所有文件
SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日"); // 日期格式化显示
// 通过客户端访问服务器当前目录中的所有文件
FTPFile[] listFiles = ftpClient.listFiles();
for (FTPFile ftpFile : listFiles) {
	System.out.println("文件名称" + ftpFile.getName());			
	Date createData = ftpFile.getTimestamp().getTime();
	System.out.println("创建时间" + fmt.format(createData));
	System.out.println("文件大小" + ftpFile.getSize()+"字节");
}
5.如果文件名称中包含中文乱码,则需要加入

String fileName=ftpFile.getName();
fileName=new String(fileName.getBytes(“iso-8859-1”),“gb2312”);

SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日"); // 日期格式化显示
// 通过客户端访问服务器当前目录中的所有文件
FTPFile[] listFiles = ftpClient.listFiles();
for (FTPFile ftpFile : listFiles) {
	String fileName=ftpFile.getName();
    // 处理中文乱码
	fileName=new String(fileName.getBytes("iso-8859-1"),"gb2312");
	System.out.println("文件名称" + fileName);			
	Date createData = ftpFile.getTimestamp().getTime();
	System.out.println("创建时间" + fmt.format(createData));
	System.out.println("文件大小" + ftpFile.getSize()+"字节");
}
6、访问服务器中指定目录中的内容

加入一个判定条件即可

boolean isChanged = ftpClient.changeWorkingDirectory("111");		
// 获取当前目录中的所有文件
if(isChanged) {
	SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日"); // 日期格式化显示
	FTPFile[] listFiles = ftpClient.listFiles();
	for (FTPFile ftpFile : listFiles) {
		String fileName=ftpFile.getName();
		fileName=new String(fileName.getBytes("iso-8859-1"),"gb2312");
					
		System.out.println("文件名称" + fileName);
					
		Date createData = ftpFile.getTimestamp().getTime();
		System.out.println("创建时间" + fmt.format(createData));
		System.out.println("文件大小" + ftpFile.getSize()+"kb");
	}		
}else {
    // 如果指定目录不存在,则创建
	ftpClient.makeDirectory("111");
}
7、文件上传至FTP服务器的指定目录
FTPClient ftpClient = new FTPClient();
try (FileInputStream in = new FileInputStream("E:\\APESOURCE\\image\\day08\\2.jpg")) {
	// 1.连接FTP服务器并检验用户名密码
	ftpClient.connect("192.168.254.175", 21);
	ftpClient.login("coco", "123456");
	// 2.切换至个目录
	boolean isChange = ftpClient.changeWorkingDirectory("oo");
	if (!isChange) {
		// 创建目录
		ftpClient.makeDirectory("oo");
		// 切换个人目录
		ftpClient.changeWorkingDirectory("oo");
	}
	// 文件上传
    // 设置文件的类型
	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();
}
8.从FTP服务器下载指定文件
FTPClient ftpClient=new FTPClient();
try(FileOutputStream out=new FileOutputStream("E:\\APESOURCE\\image"+System.currentTimeMillis()+".jpg")){
			
	ftpClient.connect("192.168.254.175",21);
	ftpClient.login("coco", "123456");
			
	// 切换至个人目录
	boolean isChange=ftpClient.changeWorkingDirectory("liubin");
			
	// 下载指定文件
	ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// 文件类型
	boolean isRetrieve=ftpClient.retrieveFile("3.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();
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kⅈꫛᧁ269

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值