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

FTP协议(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准网络协议。它允许用户在客户端和服务器之间上传、下载和管理文件。FTP协议支持匿名访问和身份验证访问,可以通过用户名和密码进行身份验证。

1.使用Ftpconsole软件进行上传和下载

 设置用户名和密码,并将想要上传的文件放入主目录,并设置权限

2.在网页中输入主机ip:web服务端口号后输入用户名和密码,则可以进入文件列表展示,并根据权限对文件进行操作

 同样的,也可以根据使用编码的方法实现对文件的上传以及下载

1.连接到FTP服务器,验证密码,切换到指定文件夹,列出文件信息,并打印输出文件的名称、创建时间和大小。如果文件夹不存在,则会创建一个新的文件夹。

  • 建立FTP连接:使用FTP函数,连接到FTP服务器。
  • 登录FTP服务器:如果需要身份验证,使用用户名和密码登录FTP服务器。
  • 获取文件列表:使用LIST命令,获取FTP服务器上的文件列表。
  • 解析和展示文件列表:根据服务器返回的文件列表数据,解析并展示文件名、大小、修改日期等信息。
public class Demo1 {

	public static void main(String[] args) {
		//创建基于ftp协议访问问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		
		try(FileInputStream in = new FileInputStream("E:\\猿究院\\20230708\\1.jpg")) {
			//连接ftp协议并验证密码
			ftpClient.connect("192.168.254.107", 21);
			ftpClient.login("c", "123");
			
			//切换个人文件夹
			
			boolean isChange = ftpClient.changeWorkingDirectory("cccc");
			//切换成功,"dd"下的所有文件
			if(!isChange) {
				//创建个人文件夹
				ftpClient.makeDirectory("cccc");
				
				//切换
				ftpClient.changeWorkingDirectory("cccc");
				
			//设置日期格式
			SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
			//获取当前目录中的所有文件
			FTPFile[] ftpFileList = ftpClient.listFiles();
			for(FTPFile ftpFile : ftpFileList) {
				String name = ftpFile.getName();
				name = new String(name.getBytes("iso-8859-1"),"gb2312");
				System.out.println("文件名称:" + name);
				
				Date createTime = ftpFile.getTimestamp().getTime();
				System.out.println("创建时间:" + fmt.format(createTime));
				System.out.println("文件大小:" + ftpFile.getSize()+"字节");
			}
	
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
		
	}

}

2.通过编码实现文件的上传

  • 建立FTP连接
  • 登录FTP服务器
  • 打开本地文件:使用流文件操作,打开本地待上传的文件。
  • 创建远程文件:使用storeFile方法,创建远程服务器上的目标文件。
  • 上传文件内容:将设置的ftp的样式以及本地文件输入流作为参数加载,完成文件上传。
public class Demo1 {

	public static void main(String[] args) {
		//创建基于ftp协议访问问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		
		try(FileInputStream in = new FileInputStream("E:\\猿究院\\20230708\\1.jpg")) {
			//连接ftp协议并验证密码
			ftpClient.connect("192.168.254.107", 21);
			ftpClient.login("c", "123");
			
			//切换个人文件夹
			
			boolean isChange = ftpClient.changeWorkingDirectory("cccc");
			//切换成功,"dd"下的所有文件
			if(!isChange) {
				//创建个人文件夹
				ftpClient.makeDirectory("cccc");
				
				//切换
				ftpClient.changeWorkingDirectory("cccc");

			}
			System.out.println(ftpClient.printWorkingDirectory());
			
			//第三步:w文件上传
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			//存文件至FTP服务器
			//参数一:FTp文件的样式
			//参数二:本地文件输入流
			boolean isStore = ftpClient.storeFile(System.currentTimeMillis()+".jpg", in);
			System.out.println(isStore);
			
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}

}

3.通过编码实现文件的下载

  • 建立FTP连接
  • 登录FTP服务器
  • 打开本地文件:使用FileOutputStream,创建本地存储下载文件的目标文件。
  • 下载文件内容:使用retrieveFile方法,从FTP服务器下载文件内容,并将其逐块地写入本地文件,直到文件传输完成。
//文件下载
public class Demo2 {

	public static void main(String[] args) {
		//创建基于ftp协议访问问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		
		try(FileOutputStream out =new FileOutputStream("E:\\猿究院\\20230708\\di\\"+System.currentTimeMillis()+".jpg")) {
			
			//连接ftp协议并输入密码
			ftpClient.connect("192.168.254.107", 21);
			ftpClient.login("c", "123");
			
			//切换个人文件夹
			boolean isChange = ftpClient.changeWorkingDirectory("cccc");
			
			//指定下载文件
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型
			boolean isRetrieve = ftpClient.retrieveFile("1.jpg", out);
			System.out.println("下载成功?"+isRetrieve);
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		}
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值