基于FTP协议的文件列表展示,文件上传,文件下载。(爱坤必看)


前言

了解FTP协议,学会使用FTP服务器进行文件列表展示,文件上传和文件下载。

一、FTP是什么?

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

二、使用步骤

1.搭建服务器

使用Ftpconsole创建一个服务器,创建好用户,设置好主目录。(记得勾选权限)

如图:在这里插入图片描述

2.访问服务器,展示文件列表。

访问FTP服务器有两种方式,一种是通过Web服务端口从网页上访问,另一种是程序从FTP服务端口运行访问。(访问时输入创建时的账户名和密码)
网页访问如下:在这里插入图片描述如果用eclipse访问 ,需要导入一个commons-net-3.6.jar包

导完包后,先创建一个FTPClient对象ftpClient,再通过connect和login方法建立与服务器的连接。

FTPClient ftpClient = new FTPClient();
ftpClient.connect(IP地址, 21);
ftpClient.login(用户名, 密码);

连接后,通过listFiles()方法返回一个FTPFiles数组,然后通过foreach打印出FTPFile文件名称,创建时间,文件大小。其中我将创建时间用SimpleDateFormat排列了格式,将fileName将字符重新编码,以免乱码。

代码如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日");
FTPFile[] ftpFileList = ftpClient.listFiles();
for (FTPFile FTPfile : ftpFileList) {
		String fileName = FTPfile.getName();
		fileName = new String(fileName.getBytes("iso-8859-1"), "gb2312");
		System.out.println("文件名称" + fileName);
		Date date = FTPfile.getTimestamp().getTime();
		System.out.println("创建时间" + sdf.format(date));
		System.out.println("文件大小" + FTPfile.getSize());
		System.out.println();

运行结果如下图:在这里插入图片描述

3.文件上传

创建一个输入流FileInputStream in = new FileInputStream(“D:\Study\cxk.jpg”)指定想要上传的文件。
如果想上传到主目录中的子目录,应该怎么实现呢?
FTPClient对象有一个changeWorkingDirectory(“(目标目录名称)”)方法,可以进入到目标目录中,如果目录不存在,使用makeDirectory(“(目录名称)”)创建一个目录,再用changeWorkingDirectory转到目标目录中,然后使用setFileType((文件类型))设置上传的文件类型,最终用storeFile(“(文件名称)”,文件输入流)上传你想上传的文件,并设置上传过去的名字。

代码如下

FTPClient ftpClient = new FTPClient();
		try (FileInputStream in = new FileInputStream("D:\\Study\\cxk.jpg")) {
			ftpClient.connect("192.168.254.112", 21);
			ftpClient.login("admin", "123456");

			boolean isChange = ftpClient.changeWorkingDirectory("hja");
			if (!isChange) {
				ftpClient.makeDirectory("hja");
				ftpClient.changeWorkingDirectory("hja");
			}

			ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
			boolean isTrue = ftpClient.storeFile(System.currentTimeMillis() + ".jpg", in);
			System.out.println("上传成功?" + isTrue);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

结果如图:
在这里插入图片描述在这里插入图片描述

4.文件下载

创建一个输出流FileOutputStream out = new FileOutputStream(“D:\download\downloadCxk.jpg”)用于存放下载的文件,并且命名下载的文件。
下载与上传大同小异,先用changeWorkingDirectory进入主目录中要访问的文件夹,再用setFileType设置下载的文件类型,最后不一样的是要用retrieveFile(下载文件的名称,文件输出流)进行文件的上传。

代码如下

FTPClient ftpClient = new FTPClient();
		try (FileOutputStream out = new FileOutputStream("D:\\download\\downloadCxk.jpg")) {
			ftpClient.connect("192.168.254.112", 21);
			ftpClient.login("admin", "123456");
			boolean isChange = ftpClient.changeWorkingDirectory("hja");
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			boolean isTrue = ftpClient.retrieveFile("copyCxk.jpg", out);
			System.out.println("下载成功?" + isTrue);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				ftpClient = null;
			}
		}

结果如图:
在这里插入图片描述在这里插入图片描述

总结

以上就是所有的内容,本文仅仅简单介绍了什么是FTP,以及用eclipse对FTP服务器的文件展示,上传以及下载,希望对您有所帮助。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值