FTP是应用层的一个文件传输协议, 主要作用是在服务器和客户端之间实现文件的传输和共享。. FTP协议运行在TCP连接上,保证了文件传输的可靠性。
使用FTP协议进行文件传输,首先要创建基于FTP协议访问文件服务器的客户端对象,并准备好
连接ftp服务器并验证用户名密码。
一、文件列表展示
public class Demo01 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try {
//连接ftp服务器并验证用户名密码
ftpClient.connect("192.168.254.140",21);
ftpClient.login("admin", "123456");
//切换文件
boolean ischange=ftpClient.changeWorkingDirectory("ftp");
if(ischange) {
//设置文件时间指定格式
SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日");
//获取目录中的所有文件
FTPFile[] ftpClientList=ftpClient.listFiles();
for(FTPFile file:ftpClientList) {
//文件名称包含中文乱码
String fileName=file.getName();
fileName=new String(fileName.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名:"+fileName);
Date createdate=file.getTimestamp().getTime();
System.out.println("创建时间:"+fmt.format(createdate));//设置指定时间格式
System.out.println("文件大小:"+file.getSize()+"字节");
}
}else {
ftpClient.makeDirectory("ftp");
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
进行文件列表展示在完成准备工作后,要使用ftpClient.changeWorkingDirectory("ftp")切换到指定文件。若文件夹不存在则调用ftpClient.makeDirectory("ftp")创建文件夹。若文件夹存在则可调用ftpClient.listFiles()进行文件列表展示。使用FTPFile[] 接受目录中的文件。
二、文件上传
public class Demo02 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try (FileInputStream in=new FileInputStream("D:\\y\\test\\3.jpg")){
//第一步:连接ftp服务器并验证用户名密码
ftpClient.connect("192.168.254.140",21);
ftpClient.login("admin", "123456");
//第二步:切换至个人目录
boolean isChange=ftpClient.changeWorkingDirectory("ftptest");
if(!isChange) {
//创建个人目录
ftpClient.makeDirectory("ftptest");
//切换
ftpClient.changeWorkingDirectory("ftptest");
}
//第三步:文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
//存文件至FTP服务器
//参数1:FTP文件保存名称
//参数2:本地文件输入流
boolean isStore=ftpClient.storeFile(System.currentTimeMillis()+".jpg", in);
System.out.println("文件上传成功?"+isStore);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//断开连接
ftpClient.disconnect();
}catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
文件上传在切换到个人目录后,调用ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)设置文件类型,然后调用ftpClient.storeFile(System.currentTimeMillis()+".jpg", in)将文件保存至服务器。即可,参数1:FTP文件保存名称,参数2:本地文件输入流。该方法返回值为布尔值。
三、文件下载
public class Demo03 {
public static void main(String[] args) {
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient=new FTPClient();
try(FileOutputStream out=new FileOutputStream("D:\\y\\test\\ftptest\\"+System.currentTimeMillis()+".jpg")) {
//连接ftp服务器并验证用户名密码
ftpClient.connect("192.168.254.140",21);
ftpClient.login("admin", "123456");
//第二步:切换至个人目录
boolean isChange=ftpClient.changeWorkingDirectory("liubin");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//文件类型
boolean isRetrie=ftpClient.retrieveFile("3.jpg", out);
System.out.println("文件下载成功?"+isRetrie);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//断开连接
ftpClient.disconnect();
}catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
文件下载在切换到个人目录后,调用ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)设置文件类型,调用ftpClient.retrieveFile("3.jpg", out)下载文件,参数1:下载文件名称,参数2:本地文件输出流。可将文件下载至指定本地文件目录。
在完成文件上传和下载后都要调用 ftpClient.disconnect()断开连接。