FTP,是一种处于应用层的用于文件传输的协议。是基于TCP协议的应用层协议,用于在网络上传输文件。
该协议使用的端口号为20和21,其中20是数据端口,21是命令端口
FTP服务器文件列表展示:
1.启动easyftp-server:
2.新建用户,设置密码,开启权限
3.在浏览器中输入主机IP加端口号
FTP将服务器中的文件信息打印到控制台
public class Demo04 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
try {
//连接FTP服务器并验证用户名密码
ftpClient.connect("192.168.98.200");
ftpClient.login("cbx", "123456");
//获取当前目录中所有文件
FTPFile[] ftpFileList = ftpClient.listFiles();
for(FTPFile file : ftpFileList) {
System.out.println("文件名称"+file.getName());
System.out.println("创建时间"+file.getTimestamp());
System.out.println("文件大小"+file.getSize());
System.out.println();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
FTP(文件上传到服务器)
public class Demo02 {
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
//读取本地文件的输入流
try(FileInputStream in = new FileInputStream("C:\\Users\\lenovo\\Desktop\\cbx\\douban\\40d43a.webp")) {
ftpClient.connect("192.168.254.143");
ftpClient.login("cbx", "123456");
//切换目录
boolean isChange = ftpClient.changeWorkingDirectory("cao");
if(!isChange) {
//创建新目录
ftpClient.makeDirectory("cao");
ftpClient.changeWorkingDirectory("cao");
}
System.out.println(ftpClient.printWorkingDirectory());
//文件上传
//设置文件格式
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//上传文件
boolean isStore = ftpClient.storeFile(System.currentTimeMillis()+".jpg", in);
System.out.println("文件上传成功?"+isStore);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//断开服务器的连接
ftpClient.disconnect();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
注意:通过storeFile()方法上传文件,第一个参数为上传到服务器后在服务器中的名称,第二个参数为读取本地文件的输入流。
FTP(文件下载)
public class Demo03 {
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try(FileOutputStream out = new FileOutputStream("C:\\Users\\lenovo\\Desktop\\cbx\\douban\\xuan\\"+System.currentTimeMillis()+".jpg")) {
ftpClient.connect("192.168.254.143",21);
ftpClient.login("cbx", "123456");
ftpClient.changeWorkingDirectory("cao");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isRetrieve = ftpClient.retrieveFile("1.jpg", out);
System.out.println("下载成功?"+isRetrieve);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
ftpClient = null;
}
}
}
}
注意:通过setFileType()方法设置文件格式,
通过retrieveFile()方法下载文件,第一个参数为文件在服务器中的名称,第二个参数为存放下载文件的输出流。