整理FTP协议相关知识,撰写FTP服务器文件列表展示、文件上传、文件下载等代码案例和实现步骤细节;

news2024/9/24 3:19:24

1、FTP简介:

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和\"上传\"(Upload)。\"下载\"文件就是从远程主机拷贝文件至自己的计算机上;\"上传\"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

 通过JDK自带的API实现,需要导入java-ftp.jar包。

有服务器端:

 

2、连接FTP的服务器端。 

代码如下:

//创建基于FTP协议访问文件服务器的客户端对象
		FTPClient client = new FTPClient();
		try {
			//连接ftp服务器并验证用户名密码
			client.connect("192.168.0.113", 21);
			client.login("LMY", "123456");
			
			//切换目录
			boolean ischange = client.changeWorkingDirectory("lmy");
			if(ischange) {
				//如果切换目录的有,获取当前目录中的所有文件
				FTPFile[] files = client.listFiles();
				//格式化时间
				SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
				for (FTPFile ftpFile : files) {
					//文件名中包含中文乱码
					String name = ftpFile.getName();
					name = new String(name.getBytes("iso-8859-1"),"gb2312");
					System.out.println("文件名称"+name);
					System.out.println("文件大小"+ftpFile.getSize()+"字节");
					
					Date date = ftpFile.getTimestamp().getTime();
					System.out.println("文件创建时间"+fmt.format(date));
				}
			}else {
				//切换目录不成功,创建目录"lmy"
				 boolean is = client.makeDirectory("lmy");
				 System.out.println(is);
			}
			

		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				client.disconnect();//关闭连接
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
3、 上传文件至服务器
FTPClient client = new FTPClient();
		try(InputStream in = new FileInputStream("D:\\niuma\\bao.jpg")) {
			
			client.connect("192.168.0.113", 21);
			client.login("LMY", "123456");
			
			boolean isChange = client.changeWorkingDirectory("cbx");
			
			if(!isChange) {
				client.makeDirectory("cbx");
				
				client.changeWorkingDirectory("cbx");
			}
			
			
			//设置文件类型,
			client.setFileType(FTPClient.BINARY_FILE_TYPE);
			//文件上传
            //参数1:文件名称
            //参数2:输入流
			boolean is = client.storeFile("cbx.jpg",in);
			
			System.out.println(is);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
4、从服务器下载 

        

FTPClient client = new FTPClient();
		try (OutputStream out = new FileOutputStream("D:\\niuma\\niuma\\bb.jpg")){
			
			//连接
			client.connect("192.168.254.128", 21);
			//登录
			client.login("LMY", "123456");
			
			//选择文件夹
			client.changeWorkingDirectory("cbx");
			
			client.setFileType(FTPClient.BINARY_FILE_TYPE);
			//下载
			boolean is =  client.retrieveFile("cbx.jpg", out);
			System.out.println(is);
		} catch (SocketException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				client.disconnect();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}

 

 

 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-Desktop-Manager连接时出现Can’t connect to redis-server

目录 1. Redis-Desktop-Manager连接需要四个参数 2.修改数据库配置文件 3.关闭防火墙 4.此时连接Redis-Desktop-Manager 1. Redis-Desktop-Manager连接需要四个参数 Name:自定义连接名 Host:redis服务器地址,在CentOS终端中使用命令&…

dubbo入门

Dubbo概述 官网: https://dubbo.apache.org Dubbo快速入门 1 安装zk 参考 https://blog.csdn.net/qq_34914039/article/details/131614771 2 实现步骤

人体扫描新技术:手机扫描生成3D人体模型

人体扫描是一种新兴的技术,它可以通过数字化的方式,再现人体的内部结构。这种模型的应用范围广泛,不仅可以应用于医学领域,还可以用于虚拟现实、游戏开发等各个领域。通过人体扫描生成模型,我们可以实时地观察人体内部…

【网络】TCP协议详解

目录 TCP协议格式 感性理解TCP报头 认识报头中的字段 序号和确认序号 4位首部长度 窗口大小 标记位 确认应答机制 超时重传机制 TCP协议格式 感性理解TCP报头 linux内核是用C语言写的,所以报头实际上就是一种结构化的数据对象,用伪代码可表示为…

23种设计模式总结

设计模式的本质是:“找到变化,封装变化” 设计模式的类型分为: 创建型:负责提供创建对象的机制 结构型:将对象或类组合成更大的结构,同时保持对外结构的不变,对内结构的灵活 行为型&#xff1a…

CTFHub XSS 过滤关键词 WriteUp

前文链接&#xff1a;DOM反射xss 这次直接浏览器输入payload&#xff0c;发现 script 被过滤掉了 </textarea>"><script srchttp://xsscom.com//cZ2vvZ></script>碰到这种情况不要慌&#xff0c;下面给出两种方法绕过过滤关键字。 双写绕过 <…

安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

简介 在做Python开发时&#xff0c;安装需要的第三方库时&#xff0c;大多数人喜欢选择在命令行用pip进行安装。 然而有时敲入pip命令会提示‘pip’不是内部或外部命令。。如图&#xff1a; 解决办法 1、在python安装目录中找得到script文件夹&#xff0c;查看文件夹内部是否…

解锁开发成果的商业价值,云商店如何与开发者共赢未来?

从PC互联网时代到移动互联网时代&#xff0c;用户获取各种应用的方式越来越便捷&#xff0c;只需要动动手指就可以获得自己想要的各种应用&#xff1b;同样&#xff0c;任何一个开发者有好的创意&#xff0c;都可以开发出受欢迎的应用&#xff0c;并获得不菲的商业回报。 尽管…

1.Git使用技巧-基础原理

Git 使用技巧 文章目录 Git 使用技巧前言一、Git 安装二、搭建服务端仓库三、搭建客户端1. git 通信2. git支持的通信协议本地拉取代码3. 配置用户名和密码查看配置 查看git 帮助Git 工作流程总结参考 前言 Git 是一个开源的分布式代码版本控制系统&#xff0c;用于敏捷高效地…

sql分页查询

文章目录 前言一、mysql分页1. limit 102. limit 10,20 二、oracle分页1. ROWNUM2. OFFSET和FETCH 三、PostgreSQL1.LIMIT 42.LIMIT 3 OFFSET 2 总结 前言 分页查询作为数据库必不可少的功能&#xff0c;每家数据库厂商都有各自的标准&#xff0c;下面仅记录目前主流数据库。 …

E2. Rudolf and Snowflakes (hard version) codeforces1846E2

Problem - E2 - Codeforces 题目大意&#xff1a;在无向图中&#xff0c;初始有一个点&#xff0c;然后将k个点连接到1号点上&#xff0c;之后每次操作分别将k歌点连接到之前新加的点上&#xff0c;这样的操作至少有1次&#xff0c;t次询问&#xff0c;每次询问给出一个数n&am…

ubuntu系统自带的Text Editor编辑器不高亮解决办法

平时在写launch文件时&#xff0c;我喜欢用ubuntu系统自带的text编辑器&#xff0c;但发现使用text打开launch 文件时&#xff0c;没有高亮功能了&#xff0c;如下图所示&#xff1a; 解决办法非常简单&#xff0c;因为launch和xml文件语法规则类似&#xff0c;只需将text编辑…

Kotlin~Composite组合模式

概念 能够帮助实现树状结构的模式。 主要特点 递归组合树状结构统一处理所有对象 角色介绍 Component: 组合接口Leaf: 叶子节点&#xff0c;无子节点Composite&#xff1a;枝节点&#xff0c;用来存储子部件 UML 代码实现 interface Organ {fun personCount():Int } cla…

使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令

使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令 文章目录 使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令一、Rust 概述使用场景优点缺点 二、功能实现1、代码2、运行日志3、服务器文件 一、Rust 概述 Rust 已经听了无数遍&#xff0c;我很清楚它很强&am…

windows11终端窗口更换颜色布局

1.首先我们在windows商店下载powershell 2.访问ohmyposh下载字体https://ohmyposh.dev/docs/installation/fonts https://ohmyposh.dev/docs/installation/fonts 下载完成后解压-选择全部右键-显示更多选项-为所有用户进行安装 3.安装完成后打开power shell&#xff0c;选择设置…

批量生成工资条和恢复成工资表

一、问题的提出 人事、财务经常会用到工资条&#xff0c;如果手工添加比较麻烦&#xff0c;而且容易出错&#xff0c;我们可以通过录制宏&#xff0c;或者插入VBA代码的方法来解决。有了VBA后&#xff0c;我们可以定义按钮&#xff0c;绑定VBA代码&#xff0c;实现一键生成工资…

站在递归的角度上去“观赏”链式二叉树

&#x1f349;博客主页:阿博历练记 &#x1f4d6;文章专栏:数据结构与算法 &#x1f68d;代码仓库:阿博编程日记 &#x1f361;欢迎关注:欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f384;链式二叉树&#x1f50d;1.二叉树的框架&#x1f50d;2.二叉树的创建&…

浅谈RPC协议

RPC协议 RPC简介为啥需要RPCRPC的调用过程gRPCProtoBuffergRPC实战 RPC简介 RPC&#xff08;Remote Procedure Call Protocol&#xff09;远程过程调用协议&#xff0c;目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式&#xff08;TCP 或者 UDP&#x…

【数据结构】从树到二叉树

目录 ​编辑 一. 前言 二. 树的概念及结构----凉拌海带 2.1 什么是树 2.2 树的基本术语 2.3 树的表示 2.4 树在实际生活中的应用 二. 二叉树的概念及结构----扬州炒饭 2.1 什么是二叉树 2.2 二叉树两种特殊形式 2.3 二叉树的性质 2.4 二叉树的存储结构 三. 链式二叉树基本操…

MySQL之DQL万字解析(涵盖所有查询!!!)

今日金句 生活中有80%的痛苦是来自上班&#xff0c; 但如果不上班&#xff0c;就会有100%的痛苦来自没钱 文章目录 前言一、基础查询1.1 语法1.2 实例 二、条件查询2.1 语法2.2 条件查询实例2.3 模糊查询实例 三 、排序查询3.1 语法3.2 实例 四 、聚合函数4.1 概念4.2 聚合函…