FTP 协议的概括:
文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。FTP协议与TCP协议有着相似的的地方,都基于连接来实现文件的共享,同时也分为客户端和服务器。在现实生活中基于FTP的服务端程序已经有了成熟的发展,同事时也不需要我们来手动的实现服务的代码,下面,我们就以easyftp这个小程序来实现文件的共享。
在这个小的程序中我们可以,自己设定用户登陆账户以及密码,同时还可以给予用户相应的权限,如,查看以及删除文件的权限等。服务器的相应功能就介绍完了。
下面我们开始客户端的创建:
在Java SE中并没有,关于ftp协议的架包,所以我们用到的是,Apache提供的第三方架包(commom-net)
下面是代码的实现:
文件的上传:
package com.apesource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class tast {
public static void main(String[] args) {
// 创建对象
FTPClient clint = new FTPClient();
try (FileInputStream location = new FileInputStream("F:\\陈嘻嘻\\新建文件夹\\555.jpg")) {
// 连接FTP服务器
clint.connect("192.168.43.71", 21);
// 登陆
clint.login("5211314", "5211314");
// 切换到指定文件夹下
boolean is = clint.changeWorkingDirectory("cici");
if (!is) {
clint.makeDirectory("cici");
clint.changeWorkingDirectory("cici");
}
// 存储文件
// 参数一:ftp服务器的存储位置
// 参数二:本地的文件输入流
clint.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean istrue = clint.storeFile("face.png", location);
System.out.println("是否上传成功:"+istrue);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
clint.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上传结果:
我们可以看到在对应的目录下,已经有了相应的图片.
文件的下载:
文件的下载,即从服务器中将文件下载到本地磁盘中
package com.apesource;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class tast3 {
public static void main(String[] args) {
String fileName = "face.png";
// 创建对象
FTPClient clint = new FTPClient();
try (FileOutputStream out = new FileOutputStream("F:\\陈嘻嘻\\新建文件夹\\豆瓣图\\"+fileName)) {
// 连接FTP服务器
clint.connect("192.168.43.71", 21);
// 登陆
clint.login("5211314", "5211314");
//
boolean is = clint.changeWorkingDirectory("cici");
System.out.println("是否切换成功"+is);
// 下载文件
// 参数一:ftp服务器指定文件
// 参数二:本地的文件输出流
clint.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isTrue = clint.retrieveFile(fileName, out);
System.out.println("下载成功?"+isTrue);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
clint.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
下载结果;
我们可以看见在指定的目录下,已经有了face.png这张图片,代表下载成功