这是本人第一篇原创,但是还是不知道写啥就索性把代码拷贝上来吧。
之所以用到这个知识,是由于希望通过一台web服务器页面方式访问与之链接的所有其他服务器的文件。
使用到的jar包来自 http://enterprisedt.com/products/edtftpj/
1、先对jar中的函数作简单介绍
2、再附上一个简单jar包,实现了一个更高层的封装使用
1、先对jar中的函数作简单介绍
核心的类 : FileTransferClient(旧版本时使用FTPClient )
创建ftp对象
FileTransferClient ftp = new FileTransferClient();
设置登录信息
ftp.setRemoteHost(host);
ftp.setUserName(username);
ftp.setPassword(password);
连接服务器并且登录
ftp.connect();
退出并断开连接
ftp.disconnect();
连接服务器并且手动登录
ftp.connect();
ftp.manualLogin();
设置为非自动登录
ftp.getAdvancedFTPSettings().setAutoLogin(false);
传输模式(默认binary)
设置为ascii
ftp.setContentType(FTPTransferType.ASCII);
高级设置,设置传输连接模式,主动和被动都是相对server而言
设置为主动模式:服务器发起数据连接
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.ACTIVE);
ftp.getAdvancedFTPSettings().setActivePortRange(61500, 61510);
被动模式:客户端发起数据连接,服务器监听
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
返回当前目录下的文件和目录
String[] files = ftp.directoryNameList();
返回当前目录下的文件和目录的详细信息
String[] descriptions = ftp.directoryNameList("mydirname", true);
以对象形式返回当前目录下的文件和目录的详细信息,对象里面包括大小、是否为目录等。
FTPFile[] files = ftp.directoryList();
获取当前目录
String directory = ftp.getRemoteDirectory();
改变当前目录
ftp.changeDirectory(directory);
回到上层目录
ftp.changeToParentDirectory();
上传文件(简单用法)
ftp.uploadFile(localFilePath, remoteFileName);
下载文件(简单用法)
ftp.downloadFile(localFilePath, remoteFileName);
删除文件
deleteFile(remoteFileName)
服务器为德国场所,客户端为英国场所,此时可能会报错,通过如下设置客户端场所转换,来避免此类问题
Locale[] locales = new Locale[2];
locales[0] = = Locale.GERMAN;
locales[1] = Locale.getDefault();
ftp.getAdvancedFTPSettings().setParserLocales(locales);
2、再附上一个自己写的简单jar包代码,实现了一个更高层的封装使用
/***
** 使用两个函数即可达到便利下载文件的目的
* setPara设置参数,
* download2下载文件
**
*/
package com.xxx
import java.util.Date;
import com.enterprisedt.net.ftp.*;
import com.enterprisedt.util.debug.*;
/********
* 功能描述:ftp客户端功能,负责ftp请求和处理
*
*
*/
public class ftpProc {
//开发环境下 debugFlag设置为true,其他环境设置为false
private boolean debugFlag = true;
FileTransferClient ftp = null;
String localFilePath = "D:\\"; //投产环境一定要修改
//public static int ftpCount = 5; //控制实例的数量,在创建 该对象前判断
public String fileFullName = "";
public ftpProc()
{
}
/***
* 功能描述:封装的下载文件方法(建立链接,下载文件到本地临时目录,退出连接)
* 参数:远程路径+文件名
*
*/
public boolean download2(String remoteFilePath)
{
if("" == conn())
{
return false;
}
else
{
String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/")+1);
fileFullName = localFilePath+"/"+fileName ;
if(false == download(fileFullName, remoteFilePath))
{
return false;
}
else
{
if(false==bye())
{
return false;
}
}
}
return true;
}
/*****
* 功能描述:设置登录参数
* 主机 用户名 密码 本地目录
*/
public boolean setPara(String host, String username, String password, String localPath){
try{
ftp = new FileTransferClient();
ftp.setRemoteHost(host);
ftp.setUserName(username);
ftp.setPassword(password);
localFilePath = localPath;
}
catch(FTPException ftpE){
Debug(""+ftpE.getReplyCode());
Debug(""+ftpE.toString());
return false;
}
catch(Exception e)
{
Debug(e.getMessage());
return false;
}
return true;
}
/***功能描述: 连接 登录并显示当前目录
*
*/
public String conn()
{
String remoteDir = "";
try{
ftp.connect();
remoteDir = ftp.getRemoteDirectory();
}
catch(FTPException ftpE){
Debug(""+ftpE.getReplyCode());
Debug(""+ftpE.toString());
return "";
}
catch(Exception e)
{
Debug(e.getMessage());
return "";
}
return remoteDir;
}
/*****功能描述:下载文件
* localPath : 本地路径
* remoteFilename: 远程文件名(全路径)
*/
public boolean download(String localPath, String remoteFilename)
{
try{
if(ftp.exists(remoteFilename)){
ftp.downloadFile(localPath, remoteFilename);
}
else
return false;
}
catch(FTPException ftpE){
Debug(""+ftpE.getReplyCode());
Debug(""+ftpE.toString());
return false;
}
catch(Exception e)
{
Debug(e.getMessage());
return false;
}
return true;
}
/*****退出ftp
*
*/
public boolean bye()
{
try{
ftp.disconnect();
}
catch(FTPException ftpE){
Debug(""+ftpE.getReplyCode());
Debug(""+ftpE.toString());
return false;
}
catch(Exception e)
{
Debug(e.getMessage());
return false;
}
return true;
}
private void Debug(String msg){
if(true==debugFlag){
Date logTime = new Date();
System.out.println(logTime.toString() + ":[ftp]:"+msg);
}
}
}
https://blog.51cto.com/gugw9handsome/1586466