基于FTP编程操作FTP服务器的代码案例以及实现步骤细节

本篇技术博客用于记录基于FTP编程对FTP服务器进行的一系列操作步骤的整理与总结: 

获取并展示目录中的所有文件。

创建个人目录并切换至个人目录。

基于FTP编程实现文件的上传操作。

基于FTP编程实现文件的下载操作。

对控制台展示文件创建时间以及中文乱码问题的细节处理。

目录

一. 实现概述

二. 实现细节

1. 获取并展示目录中的所有文件

2. 创建个人目录并切换至个人目录

3. 实现文件上传至个人目录

4. 实现文件下载至指定目录

5. 对控制台展示文件创建时间以及中文乱码问题的细节处理


一. 实现概述

既然我们是对FTP服务器进行操作,那么我们编写的程序则是基于FTP协议的客户端程序(FTPClient),其中实现了一些对服务器的操作。

基于面向对象的设计思想,必须先实例化出FTPClient对象继续进行,然后连接服务器并验证身份后去实现各种不同的操作。

tips: 基于此协议进行编程需要拓展包commons-net-3.6.jar的支持。

 二. 实现细节

1. 获取并展示目录中的所有文件

第一步,创建基于FTP协议访问文件服务器的客户端对象。

FTPClient ftpClient = new FTPClient(); // 创建客户端对象

第二步,连接到FTP服务器并验证用户名和密码。

  1. 通过ftpClient对象的connect()方法连接至服务器,第一个参数是服务器的主机号,第二个参数是端口号。
  2. 通过ftpClient对象的login()方法验证用户名和密码。
 // 连接服务器并验证身份
ftpClient.connect("这个地方是你要访问的服务器的主机地址,我才不会给你我的!!!",21);
ftpClient.login("用户名","密码");

第三步,进入到服务器的指定目录后,获取所有文件并展示。

  1. 还是通过ftpClient对象,调用它的listFiles()方法,该方法会返回一个FTPFile类型的数组,用于存放指定目录下的所有文件。
  2. 拿到这个数组之后,事情就开始变得枯燥乏味了: 遍历这个数组,并输出每次被遍历文件的文件名,创建时间以及文件大小。
//获取当前目录中的所有文件
FTPFile[] ftpList = ftpClient.listFiles();
for(FTPFile file : ftpList) {
	System.out.println("文件名: "+file.getName());
	System.out.println("文件大小: "+file.getSize()+"字节");
	System.out.println("创建时间: "+file.getTimestamp());
}

运行成功后控制台显示所有文件信息:

2. 创建个人目录并切换至个人目录

调用ftpClient对象的changeWorkingDirectory()方法来切换至指定的工作目录,该方法的返回值是一个布尔值,切换成功则为true,否则是false。

我们在进入一个未曾访问过的服务器时,显然个人的工作目录是不存在的,就要通过ftpClient对象的makeDirectory()方法创建个人目录,再切换至个人目录。

boolean isChanged = ftpClient.changeWorkingDirectory("个人目录名称"); // 切换至个人目录
// 如果不存在,则创建,然后切换
if(!isChanged) {
	// 创建个人目录
	ftpClient.makeDirectory("个人目录名称");
	//切换至个人目录
	ftpClient.changeWorkingDirectory("个人目录名称");
}
System.out.println(ftpClient.printWorkingDirectory()); //控制台显示个人目录名称

 3. 实现文件上传至个人目录

第一步,实例化FTPClient对象之后,连接服务器并验证身份。

// 创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
// 连接服务器并验证身份
ftpClient.connect("",21);
ftpClient.login("", "");

第二步,切换到个人目录。

boolean isChanged = ftpClient.changeWorkingDirectory("");
if(!isChanged) {
    // 创建个人目录
    ftpClient.makeDirectory("");
    //切换至个人目录
    ftpClient.changeWorkingDirectory("");
}
System.out.println(ftpClient.printWorkingDirectory());

第三步,文件上传。

首先设置要上传的文件类型: 调用ftpClient对象的setFileType()方法,传进FTPClient类中的常量值。调用ftpCLient对象的storeFile()方法实现上传功能。参数1是文件的保存名称,参数2传入一个本地文件的输入流。该方法的返回值也是一个布尔类型,最后输出这个返回值以验证是否上传成功。

该输入流定义在try(FileInputStream fis = new FileInputStream("")){}

// 第三步: 文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 设置文件类型
			
//存文件至FTP服务器
// 参数1: FTP文件的保存名称
// 参数2: 本地文件输入流
boolean isStore = ftpClient.storeFile("文件名", fis);
System.out.println(isStore);

运行成功后,控制台输出工作目录以及上传结果。

 

 4. 实现文件下载至指定目录

与上传功能的前两步一样。

实现下载功能调用ftpClient的retrieveFile()方法,第一个参数表示想要下载的文件的文件名称,第二个参数传入一个文件输出流

最后输出下载是否成功。

最后添加finally块断开与服务器的连接,并处理其异常。

输出流定义在了try(FileOutputStream fos = new FileOutputStream("d:\\file\\download\\"+System.currentTimeMillis()+".jpg")) {} 中。

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean isRetrieved = ftpClient.retrieveFile("",fos);
System.out.println("下载成功?"+isRetrieved);
finally {
	try {
         // 断开连接   
         ftpClient.disconnect();
    } catch (IOException e) {
		// TODO Auto-generated catch block
		ftpClient=null;
    }
}

下载成功后控制台输出结果,并下载到了指定的目录下。

 5. 对控制台展示文件创建时间以及中文乱码问题的细节处理

 在向控制台输出所有文件时,出现了中文乱码问题和时间格式未处理的问题。

 解决方式: 将文件名赋给一个新的字符串,并对其重新编码。

String fileName = file.getName();
fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名: "+fileName);

定义一个SimpleDateFormat对象,规定日期的格式,在循环中调用file.getTimestamp().getTime()方法得到日期对象date,将其传入fmt.format(date)中输出正确的日期时间。

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date = file.getTimestamp().getTime();
System.out.println("创建时间: "+fmt.format(date));

以上就是对基于FTP协议编程案例的整理与总结,别忘了每一个功能整体都要处理异常。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值