基于FTP协议的文件上传与下载,因为我们没有指定的FTP服务器端,因此需要我们先下载一个easyftp-server-1.7.0.10-cn来作为我们要访问的FTP服务器,我们只需写一个客户端与它连接即可,首先我们下载FTP服务器以后,我们需要对它进行如下操作:
我们要先对它进行设置用户名和密码,还有主要目录和访问权限,然后它就作为一个FTP服务器供我们连接,我们只需要创建一个客户端来访问它就行了。
FTP服务器网页版如下:
接下来我们要创建一个基于FTP协议的客户端对象,基于FTP协议创建客户端对象需要我们下载第三方jar包,如下是我们下载的jar包:
我们在创建客户端对象后,首先要与FTP服务器建立连接,用你的IP地址和FTP服务器端口建立连接,然后输入用户名和密码进行登录,与FTP服务器建立连接后,就可以根据FTP服务器赋予你的权限来进行一些操作了,比如,上传本地文件至FTP服务器,通过读取本地文件等一系列方法上传至FTP服务器,具体失现代码如下:
package com.hpc.wyj01;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class Demo02 {
public static void main(String[] args) {
//FTP协议的客户端对象
FTPClient ftpClient=new FTPClient();
//创建文件输入流,用于读取客户端本地的文件
try (FileInputStream localIn = new FileInputStream("D:\\hpc\\图片\\爱的法则.jpg")) {
//step1:
//连接FTP服务器
ftpClient.connect("192.168.254.165",21);
//step2:
//登录
ftpClient.login("hpc", "hpc");
//step3:操作
//切换至指定目录
boolean ischange=ftpClient.changeWorkingDirectory("wyj");
System.out.println("切换目录1:"+ischange);
if(!ischange) {
ftpClient.makeDirectory("wyj");
ischange=ftpClient.changeWorkingDirectory("wyj");
}
System.out.println("切换目录2:"+ischange);
//日期转换格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//获取该目录下的所有文件
FTPFile[] files=ftpClient.listFiles();
for(FTPFile f:files) {
System.out.println("文件名称:"+f.getName());
//获取文件创建时间
Date crateDate=f.getTimestamp().getTime();
//日期格式化
String crateDateStr=sdf.format(crateDate);
System.out.println("创建时间:"+crateDateStr);
//文件大小
System.out.println("文件大小:"+f.getSize());
//上传用户
System.out.println("上传用户:"+f.getUser());
System.out.println();
}
//存储文件(将本地文件上传至FTP服务器)
//参数1:FTP服务器的存储位置(目录+文件名)
//参数2:本地的文件输入流
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //存储前设置文件类型
boolean b=ftpClient.storeFile("love.jpg", localIn); //存储
System.out.println(b);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//最后关闭
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果如下:
这就把你选的文件上传至你在服务器上指定的主目录里了。
我们还可以从FTP服务器上下载文件至本地,首先,我们还是需要连接FTP服务器,通过创建客户端对象,与FTP服务器建立连接,登录以后,我们就可以切换到FTP服务器的某个目录了,然后选择我们要下载的文件,通过输出流从服务器端输出至本地,具体实现代码如下:
package com.hpc.wyj01;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class Demo03 {
public static void main(String[] args) {
//下载FTP服务器指定目录的某个文件
FTPClient ftpClient=new FTPClient();
try (FileOutputStream out = new FileOutputStream("d:\\hpc\\love.jpg")) {
ftpClient.connect("192.168.254.165",21); //连接
ftpClient.login("hpc", "hpc"); //登录
ftpClient.changeWorkingDirectory("wyj"); //切换目录
//下载文件(获取FTP服务器指定目录(wyj)的文件)
//参数1:服务器指定文件
//参数2:本地输出流(负责下载后写入)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isretrieve=ftpClient.retrieveFile("love.jpg", out);
System.out.println("下载成功?:"+isretrieve);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果如下:
控制台上显示true 表示下载成功,然后在FTP服务器的主目录找到下载的文件如下:
这就是基于FTP协议在FTP服务器进行文件的上传与下载。