基于FTP协议的文件上传与下载

前言

        FTP协议是文件传输协议,是一种基于TCP/IP协议的协议,他包括FTP服务器和FTP客户端;FTP服务器用来储存文件,FTP客户端需通过FTP协议对服务器进行访问,FTP服务器通常不需要我们手动编写,而是借助于已经成熟的FTP服务器程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"和"上传"。 "下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。

FTP服务器

        在这里我们采用服务器模拟工具EasyFtp,他是一个基于Wininet函数库基础上的Ftp上传工具软件;

         下载完成后,启动EasyFtp工具,并且创建账号:

 注:必需要对想要客户端进行什么操作的权限进行设置

在浏览器中访问FTP服务器:

 

基于Java编写FTP客户端

        在这里,我们采用Apache的 common-net ,common-net 是 commos 顶级项目下一个非常强大的用于网络编程的子项目:



上传文件 

 

import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;

public class Test01 {
	public static void main(String[] args) {
		//FTP协议的客户端对象
				FTPClient ftpClient=new FTPClient();
				//创建文件输入流,用于读取客户端本地的文件
				try (FileInputStream localIn = new FileInputStream("D://1627356545598.xlsx")) {
				//step1:
					//连接FTP服务器
					ftpClient.connect("192.168.254.107",21);
				//step2:
					//登录
					ftpClient.login("admin", "admin");
				//step3:操作
					//切换至指定目录
					boolean ischange=ftpClient.changeWorkingDirectory("download");
					if(!ischange) {
						ftpClient.makeDirectory("download");
						ischange=ftpClient.changeWorkingDirectory("download");
					}
					//存储文件(将本地文件上传至FTP服务器)
					//参数1:FTP服务器的存储位置(目录+文件名)
					//参数2:本地的文件输入流
					ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);    //存储前设置文件类型
					boolean b=ftpClient.storeFile("11111.xlsx", localIn);    //存储
					System.out.println(b);
					
				} catch (IOException e) {
					e.printStackTrace();
				}finally {
					try {
						//最后关闭
						ftpClient.disconnect();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
	}

}

上传结果:

从服务器上下载文件 

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;

public class Demo03 {
	public static void main(String[] args) {
		//下载FTP服务器指定目录的某个文件
		String filename="11111.xlsx";
		FTPClient ftpClient=new FTPClient();
		try (FileOutputStream out = new FileOutputStream("D:\\琐碎\\"+filename)) {
			ftpClient.connect("192.168.254.107",21);   //连接
			ftpClient.login("admin", "admin");    //登录
			ftpClient.changeWorkingDirectory("download");    //切换目录
			
			//下载文件(获取FTP服务器指定目录(wyj)的文件)
			//参数1:服务器指定文件
			//参数2:本地输出流(负责下载后写入)
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			boolean isretrieve=ftpClient.retrieveFile(filename, out);
			System.out.println("下载成功?:"+isretrieve);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

下载结果:

 common-net还提供了其他方法,对FTP服务器的文件进行查看:

            //日期转换格式
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
			//获取该目录下的所有文件
			FTPFile[] files=ftpClient.listFiles();
			
			for(FTPFile f:files) {
				System.out.println("文件名称:"+f.getName());
				//获取文件创建时间
				Date crateDate=f.getTimestamp().getTime();
				//日期格式化
				String crateDateStr=sdf.format(crateDate);
				System.out.println("创建时间:"+crateDateStr);
				//文件大小
				System.out.println("文件大小:"+f.getSize());
				//上传用户
				System.out.println("上传用户:"+f.getUser());
				System.out.println();
			}
					


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雾远望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值