FTP协议(File Transfer Protocol,文件传输协议)是一个用于在计算机网络上客户端和服务器之间进行文件传输的应用层协议,包括FTP服务器和FTP客户端两个组成部分。 和HTTP相比,FTP面向的直接是服务器的文件系统,并且具有维持状态的特点,在文件传输管理上,FTP更胜一筹。
一、主要功能: 传输文件到远程主机/从远程主机下载文件
二、 应用层模式: client/server模式
client: 发起传输的一方
server: 远程主机
ftp服务器: 端口号 21
三、如何使用:用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。我们在这里在一台电脑上安装easyftp工具作为服务器,一个java程序作为客户端来演示文件的上传与下载。
1.运行easyftp工具(开启ftp服务端),这里注意我们要提前设置好用户和密码以及用户权限
2.上传文件到服务器的某个文件目录下
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
public class FTPTest {
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try (InputStream localIn = new FileInputStream("C:\\Users\\肖\\Desktop\\moon.jpg")) {
//连接
ftpClient.connect("192.168.10.31", 21);
//登录
ftpClient.login("xxy", "5352");
//更换上传时的文件夹
boolean isChange = ftpClient.changeWorkingDirectory("/xxy");
System.out.println(isChange);
//如果更换文件夹失败,就新建一个文件夹并切换
if(!isChange) {
ftpClient.makeDirectory("/xxy");
}
//存储文件(将本地文件上传至FTP服务器)
//存储前,设置文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//存储文件
//参数一:服务器指定文件
//参数二:本地输入流
ftpClient.storeFile("moon.jpg", localIn);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//断开连接
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.我们在浏览器键入服务器端ip和web服务端口后进入服务端页面,就可以在xxy目录下看到成功上传了一张名为’moon’的图片:
4.可以看到在我们的ftp服务器还有一张名为’gd’的图片,我们可以通过下面的程序将他下载到本机的某个文件目录下
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPTestRetireve {
public static void main(String[] args) {
FTPClient ftpclient = new FTPClient();
//获取到文件名
String fileName = "gd.jpg";
//输出流到本地文件
try (FileOutputStream out = new FileOutputStream("C:\\Users\\肖\\Desktop\\newgd.jpg")) {
//连接
ftpclient.connect("192.168.10.31", 21);
//登录
ftpclient.login("xxy", "5352");
//更换访问的文件夹
ftpclient.changeWorkingDirectory("/xxy");
//设置文件类型
ftpclient.setFileType(FTPClient.BINARY_FILE_TYPE);
//从服务器下载文件到指定目录
ftpclient.retrieveFile(fileName, out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//断开连接
ftpclient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5.下载成功,可以看到我们的桌面上到了一张名为’newgd’的图片
总结:连接-登录-选择文件夹-上传文件到服务器/从服务器下载文件