一、什么是FTP?
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上传(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
二、FTP服务器
使用ftp服务器进行文件传输前,要先对ftp权限进行设置
网页界面如下:
Java连接FTP服务器需要导入jar包
三、上传
package com.apesource.demo;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class Upload {
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
// 创建文件输入流,用于读取本地的文件
try (FileInputStream localIn = new FileInputStream("E:\\test\\run\\yy1.jpg")) {
// step1:连接服务器
ftpClient.connect("192.168.254.159",21);
// step2:登录
ftpClient.login("qmy", "qmy");
// step3:操作
// 切换至指定位置
boolean isChange = ftpClient.changeWorkingDirectory("qmy");
System.out.println("切换工作目录1:"+isChange);
if(!isChange) {
ftpClient.makeDirectory("qmy");
isChange = ftpClient.changeWorkingDirectory("qmy");
}
System.out.println("切换工作目录2:"+isChange);
// 存储文件(将本地文件上传至ftp服务器
// 参数1:ftp服务器的存储位置(目录+文件夹)
// 参数2:本地的文件输入流
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 存储前设置文件类型
ftpClient.storeFile("dir01/stu/qmy.jpg", localIn);// 存储
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
上传结果
四、下载
package com.apesource.demo;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class Download {
public static void main(String[] args) {
String downloadFileName = "yy1.jpg";
FTPClient ftpClient = new FTPClient();
try (FileOutputStream out = new FileOutputStream("E:\\test\\run\\qmy\\"+downloadFileName)) {
ftpClient.connect("192.168.254.159",21);
ftpClient.login("qmy", "qmy");
ftpClient.changeWorkingDirectory("qmy");// 切换目录
// 下载文件(获取FTP服务器指定目录(qmy)的文件
// 参数1:服务器指定文件
// 参数2:本地输出流(负责下载后写入)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isRetrieve = ftpClient.retrieveFile(downloadFileName, out);
System.out.println("下载成功?"+isRetrieve);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
下载结果: