一、Ftp协议简介
File Transfer Protocol,文件传输协议,顾名思义,Ftp就是用于文件的传输,Ftp协议是基于TCP协议的,因此,在一个Ftp会话开始前,客户端和服务器必须首先建立一个TCP连接,这个TCP连接通常被称作控制连接,客户端通过此连接向服务器发送FTP命令,服务器处理命令后,将返回一个响应码。
二、FTP 服务器端
1.步骤
步骤:
- 创建FTP客户端(FTPClient对象):使用
FTPClient
类的构造函数创建了一个FTPClient
对象ftpClient
,用于FTP服务器的连接访问。- 连接到FTP服务器:使用
ftpClient.connect("192.168.199.100", 21);
尝试连接到IP地址为192.168.199.100
,端口号为21
(FTP服务的默认端口)的FTP服务器。- 登录FTP服务器:使用
ftpClient.login("bailongma", "123456");
以用户名bailongma
和密码123456
登录到FTP服务器。- 获取FTP服务器上的文件列表:调用
ftpClient.listFiles();
方法获取FTP服务器上当前工作目录下的文件和目录列表。这个方法返回一个FTPFile
数组,每个元素代表一个文件或目录。
2.代码如下
package com.ztt.ftp.Demo01;
import java.io.IOException;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
/*
* 访问FTP服务器,并显式所有的文件
*/
public class ShowFtpServerFile {
public static void main(String[] args) {
//创建FTP客户端(FTPClient对象),用于FTP服务器的连接访问
FTPClient ftpClient=new FTPClient();
try {
ftpClient.connect("192.168.199.100",21);//连接
ftpClient.login("bailongma", "123456");//登录
//获取FTP服务器上的文件列表
FTPFile[] fileList=ftpClient.listFiles();
SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
for(FTPFile file:fileList) {
System.out.println("文件名称:"+file.getName());
System.out.println("文件大小:"+file.getSize());
System.out.println("用户名称:"+file.getUser());
System.out.println("创建时间:"+fmt.format(file.getTimestamp().getTime()));
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、FTP 客户端
1.步骤
- 创建FTP客户端:使用
FTPClient
类的构造函数创建了一个FTPClient
对象ftpClient
,用于后续与FTP服务器的交互。- 创建
FileInputStream
:使用FileInputStream
的构造函数创建了一个文件输入流in
,用于读取本地文件D:\test\tt1\壁紙\11.jpg
。- 连接到FTP服务器:调用
ftpClient.connect("192.168.199.100", 21);
尝试连接到IP地址为192.168.199.100
,端口号为21
(FTP服务的默认端口)的FTP服务器。- 登录FTP服务器:使用
ftpClient.login("bailongma", "123456");
以用户名bailongma
和密码123456
登录到FTP服务器。- 设置上传的文件类型:调用
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
设置上传的文件类型为二进制文件。这对于图片、视频等非文本文件是必要的,以确保文件在传输过程中不会被错误地解释或修改。- 上传文件:调用
ftpClient.storeFile("11.jpg", in);
将本地文件11.jpg
上传到FTP服务器的当前工作目录(或用户目录,具体取决于FTP服务器的配置)。这里storeFile
方法的第一个参数是远程文件名(即FTP服务器上的文件名),第二个参数是包含文件数据的输入流。storeFile
方法返回一个布尔值,表示文件是否成功上传。成功时返回true
,失败时返回false
。
2.代码如下
package com.ztt.ftp.Demo01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
public class UnloadFileToFtpServer {
public static void main(String[] args) {
//创建FTP客户端(FTPClient对象),用于FTP服务器的连接访问
FTPClient ftpClient=new FTPClient();
//创建FileInputStream文件流,用于读取本地文件
try {
FileInputStream in =new FileInputStream("D:\\test\\tt1\\壁紙\\11.jpg");
ftpClient.connect("192.168.199.100",21);//连接
ftpClient.login("bailongma", "123456");//登录
//设置上传的文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//保存文件(上传本地文件至FTP服务器当前用户目录下)
boolean isStore=ftpClient.storeFile("11.jpg", in);
System.out.println(isStore);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}