一、FTP协议允许TCP/IP网络上的两台计算机之间进行文件传输。而FTP服务是基于FTP协议的文件传输服务。工作时,一台计算机上运行FTP客户端应用程序,另一台计算机上需要运行FTP服务器端程序。只有拥有了FTP服务,客户端才能进行文件传输。
①展示指定目录的文件信息
1、先创建一个FTPClient对象,代表我们的客户端;
2、然后连接FTP服务器并且验证用户名和密码;
3、通过ftpClient.changeWorkingDirectory来查看是否存在我们需要的目录,存在就访问并且获取目录的信息内容,否则创建这个目录;
4、最后断开连接。
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器并且验证用户名和密码
ftpClient.connect("192.168.254.175", 21);
ftpClient.login("coco", "123456");
// 查看是否存在对应的目录
boolean isChange = ftpClient.changeWorkingDirectory("hai");
if (isChange) {
// 目录存在 显示该目录的内容
FTPFile[] FTPFileList = ftpClient.listFiles();
// 处理日期格式
SimpleDateFormat fmt = new SimpleDateFormat("XXXX-NN-BB");
for (FTPFile ftp : FTPFileList) {
// 处理乱码
String name = ftp.getName();
name = new String(name.getBytes("iso-8859-1"), "gb2312");
System.out.println("文件名称:" + name);
Date date = ftp.getTimestamp().getTime();
System.out.println("创建时间:" + fmt.format(date));
System.out.println("文件大小:" + ftp.getSize());
System.out.println();
}
} else {
ftpClient.makeDirectory("lizhihui");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 断开连接
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
ftpClient = null;
}
}
}
②上传文件到指定目录
1、需要将上传的文件以流的方式引入;
2、通过ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);指定文件类型;
3、最后使用ftpClient.storeFile上传文件,他需要两个参数,第一个参数为文件名称,第二个参数为我们引入的文件流。
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try (InputStream in = new FileInputStream(new File("D:\\java\\ddc.jpg"))) {
// 连接FTP服务器并且验证用户名和密码
ftpClient.connect("192.168.254.175", 21);
ftpClient.login("coco", "123456");
// 查看是否存在对应的目录
boolean isChange = ftpClient.changeWorkingDirectory("hai");
if (!isChange) {
// 创建个人目录
ftpClient.makeDirectory("hai");
// 切换
ftpClient.changeWorkingDirectory("hai");
}
// 文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean is = ftpClient.storeFile(System.currentTimeMillis() + ".jpg", in);
System.out.println(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
③下载文件到指定目录
【创建一个输出流,写入下载的文件,通过ftpClient.retrieveFile("3.jpg", out)下载指定文件】、
1、连接FTP服务器并验证用户名密码
2、切换至个人目录
3、下载指定文件
4、断开连接,以便于他人的进入
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try (OutputStream out = new FileOutputStream(new File("C:\\java\\" + System.currentTimeMillis() + ".jpg"))) {
ftpClient.connect("192.168.254.175", 21);
ftpClient.login("coco", "123456");
boolean isChange = ftpClient.changeWorkingDirectory("dlw");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 下载指定文件
boolean isd = ftpClient.retrieveFile("3.jpg", out);
System.out.println(isd);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 断开连接
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
ftpClient = null;
}
}
}