FTP协议相关知识

文件传输协议(File Transfer Protocol,FTP)是一种提供网络之间共享文件的协议。它可以在计算机之间可靠、高效地传送文件。在传输时,传输双方的操作系统、磁盘文件系统类型可以不同。

FTP协议允许TCP/IP网络上的两台计算机之间进行文件传输。而FTP服务是基于FTP协议的文件传输服务。工作时,一台计算机上运行FTP客户端应用程序,另一台计算机上需要运行FTP服务器端程序。只有拥有了FTP服务,客户端才能进行文件传输。下面介绍FTP服务的构成和文件传输模式。

1、FTP服务构成

文件传输,指的是客户端和FTP服务器端之间的文件传输,如文件上传和下载。要实现文件传输还需要满足两个条件,如下:

1)服务器端必须开启一个TCP端口(默认为21端口),用来监听来自客户端的请求。

2)客户端连接FTP服务器端,需要使用TCP方式。这样可以保证客户端和服务器之间的会话是可靠的。

客户端与FTP服务器端之间传输一个文件是一次完整的FTP会话。该会话包含有两个连接,分别为控制连接和数据连接。其作用如下:

控制连接:客户端向FTP服务器的21端口发送连接,服务器接受连接,建立一条命令通道。FTP的命令和应答就是通过控制连接来传输的,这个连接会存在于整个FTP会话过程中。该连接主要负责将命令从客户端传给服务器,并将服务器的应答返回给客户端。所以,该连接不用于发送数据,只用于传输命令。

数据连接:每当一个文件在客户端与服务器之间进行传输时,就会创建数据连接。该连接主要用来进行文件传输。

接下来分为两部分代码:

(1)传输以及查案已有文件图片


import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class Demo01 {
	public static void main(String[] args) {
		FTPClient ftpClient = new FTPClient();
		try(FileInputStream in = new FileInputStream("C:\\Users\\Guo\\Desktop\\123456.gif")) {
			//第一步:连接ftp服务器并验证用户名密码
			ftpClient.connect("192.168.254.xxx",21);
			ftpClient.login("admin1","123456");
			//第二步:
			
			boolean isChange = ftpClient.changeWorkingDirectory("ludatou");
			
					
			if(isChange) {
			SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
			//获取当前目录的所有文件
			FTPFile[] ftpFileList = ftpClient.listFiles();
			for(FTPFile file : ftpFileList) {
				String fileName = file.getName();
				fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
				System.out.println("文件名称:"+ fileName);
				Date creatDate = file.getTimestamp().getTime();
				System.out.println("创建时间:"+ fmt.format(creatDate));
				System.out.println("文件大小:"+ file.getSize()+"字节");
			}
			}
			else {
				//创建指定目录
				ftpClient.makeDirectory("ludatou");
			
			
			}
			
			
			//第三步:文件上穿
			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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

                String fileName = file.getName();
                fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
                System.out.println("文件名称:"+ fileName);
                Date creatDate = file.getTimestamp().getTime();
                System.out.println("创建时间:"+ fmt.format(creatDate));
                System.out.println("文件大小:"+ file.getSize()+"字节");

通过这几行代码,你可以查收到文件的名称,大小以及创建时间。。。

其中若搜不到查询的文件,便会自己创建一个需要寻额文件,并可以往里面存放文件!

(2)文件的下载:、

//基于FTP协议的文件下载
public class Demo02 {
	public static void main(String[] args) {
		//创建基于FTP协议访问文件服务器的客户端对象
		FTPClient ftpClient = new FTPClient();
		
		try(FileOutputStream out = new FileOutputStream("E:\\test\\test\\"+System.currentTimeMillis()+".jpg")){
			//第1步:连接FTP服务器并验证用户名密码
			ftpClient.connect("192.168.254.xxx",21);
			ftpClient.login("lyj", "123");
			
			//第2步:切换至个人目录
			boolean isChange = ftpClient.changeWorkingDirectory("luyujiang");
			
			//第3步:下载指定文件
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型
			boolean isRetrieve = ftpClient.retrieveFile("fjq.jpg", out);
			System.out.println("下载成功?"+isRetrieve);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//断开连接
			try {
				ftpClient.disconnect();
			}catch(IOException e){
				e.printStackTrace();
				ftpClient = null;
			}
		}
	}

}

下载文件主要步骤://第1步:连接FTP服务器并验证用户名密码

                                //第2步:切换至个人目录

                               //第3步:下载指定文件

最后切记需要断开连接,以便于他人的进入!!!

最后又是道别的时间了,如果这篇文章对你有用,记得一键三连支持二锅头哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值