自己写的FTPClient的使用

首先来个FtpInfo类

package org.javawo.components.ftp;

/**
* FTP连接参数VO类
*
* @author 杨涛
*
*/
public class FtpInfo {

/** 登录用户名*/
private String name;

/** 登录密码*/
private String password;

/** 登录IP地址*/
private String ip;

/** 登录端口*/
private int port;

public String getName() {
   return name;
}

public void setName(String name) {
   this.name = name;
}

public String getPassword() {
   return password;
}

public void setPassword(String password) {
   this.password = password;
}

public String getIp() {
   return ip;
}

public void setIp(String ip) {
   this.ip = ip;
}

public int getPort() {
   return port;
}

public void setPort(int port) {
   this.port = port;
}

}

其次再来Ftp的实际操作类:

package org.javawo.components.ftp;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

/**
*
* FTP消费类,提供一系列的FTP操作方法
*
* @author 杨涛
*
*/
public class FtpUtil {

/** 登录用户名,密码,IP等参数*/
private String name,password,ip;

/** 登录端口*/
private int port;

/** FTP操作对象*/
private FTPClient ftpClient = null;

/** 构造方法,初始化传入要连接的FTP参数信息*/
public FtpUtil(FtpInfo ftpInfo) throws Exception {
   if(ftpInfo==null) {
    /** 判断如果为null 就抛出初始化异常*/
    throw new Exception("传递的FTP连接参数对象是null");
   } else {
    this.init(ftpInfo);
   }
}

/**
* 下载文件到本地
*
* @param remoteFileName
* @param localFileName
*/
public void loadFile(String remoteFileName, String localFileName) {
   BufferedOutputStream buffOut = null;
   try {
    buffOut = new BufferedOutputStream(new FileOutputStream(localFileName));
    /** 写入本地文件*/
    ftpClient.retrieveFile(remoteFileName, buffOut);
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    try {
     if (buffOut != null)
      buffOut.close();
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
}

/**
* 上传文件到FTP服务器上
*
* @param localFileStream
* @param fileName
* @return
* @throws IOException
*/
public boolean uploadFile(InputStream localFileStream, String fileName) throws IOException {
   /** 返回参数*/
   boolean fla = false;
   try{
    /** 设置文件类型*/
    ftpClient.setFileType();
    /** 上传之前先给文件命明为.TMP*/
    String tempName = fileName+".tmp";
    /** 开始上传文件*/
    ftpClient.storeFile(tempName, localFileStream);
    /** 上传完毕之后再该为原名*/
    renameFile(tempName,fileName);
    fla = true;
   }catch(Exception ex){
    ex.printStackTrace();
   }finally {
    localFileStream.close();
   }
   return fla;
}

/**
* 下载文件流
*
* @param remoteFileName
* @param output
* @return
*/
public boolean downloadFile(String remoteFileName, OutputStream output) throws IOException{
   try {    
    if ((remoteFileName!=null)&&(output!=null)) {
     ftpClient.setFileType();
     boolean ret = ftpClient.retrieveFile(remoteFileName, output);
     return ret;
    } else {
     return false;
    }
   }catch (IOException e) {
    if (e.getMessage()=="IOException caught while copying." || output==null) {    
     ftpClient.disconnect();
    }
    return false;
   }
}

/**
* 重命名FTP上的文件
*
* @param oldName
* @param newName
*/
public void renameFile(String oldName,String newName) {
   try{
    /** 重命名*/
    ftpClient.rename(oldName, newName);
   }catch(Exception ex){
    ex.printStackTrace();
   }
}

/**
* 获取服务器上的文件大小
*
* @param fileName
* @return
*/
public long getFileSize(String fileName) {
   try {
    StringBuffer command = new StringBuffer("size ");
    command.append(fileName);
    ftpClient.sendCommand(command.toString());
    if (ftpClient.getReplyCode()==213)
    {
     String replyText=ftpClient.getReplyString().substring(4).trim();
     return Long.parseLong(replyText);
    }else{
     return 0;
    }
   } catch (Throwable e) {
    e.printStackTrace();
    return 0;
   }
}

/**
* 初始化FTP连接参数
*
* @param ftpInfo
*/
public void init(FtpInfo ftpInfo) {
   this.name = ftpInfo.getName();
   this.password = ftpInfo.getPassword();
   this.ip = ftpInfo.getIp();
   this.port = ftpInfo.getPort();
}

/**
* 连接到FTP服务器
*
*/
public void connectServer() {
   /** 如果当前ftpClient对象是null且没有连接就连接到FTP服务器*/
   if(this.ftpClient==null && !this.ftpClient.isConnected()) {
    try {
     /** 如果ftpClient对象为null就实例化一个新的*/
     this.ftpClient = new FTPClient();
     this.ftpClient.setDefaultPort(this.port); /** 设置默认的IP地址*/
     this.ftpClient.connect(this.ip);/** 连接到FTP服务器*/
     /** 登录到这台FTP服务器*/
     if(ftpClient.login(this.name, this.password)){
      System.out.println("在类FtpUtil中: 服务器"+this.ip+"的用户"+this.name+"登录成功!");
     }
    }catch(Exception ex){
     ex.printStackTrace();
    }
   }
}

/**
* 销毁FTP服务器连接
*
*/
public void closeConnect() {
   /** 判断当前ftpClient对象不为null和FTP已经被连接就关闭*/
   if (this.ftpClient != null && this.ftpClient.isConnected()) {
    try{
     this.ftpClient.disconnect();/** 销毁FTP连接*/
    }catch(Exception ex){
     ex.printStackTrace();
    }
   }
}
}

在来Ftp的Map连接池

package org.javawo.components.ftp;

import java.util.HashMap;

/**
* 定义一个HashMap,装载FTP连接的实例化对象,这里做FTP的连接池使用
*
* @author 杨涛
*
*/
public class FtpConnectMap {

/** K-V对应的连接池*/
@SuppressWarnings("unchecked")
private static HashMap connectMap = new HashMap();

private static FtpConnectMap ftpMap = null;

/**
* 获得FtpConnectMap的实例化对象
*
* @return
*/
public static FtpConnectMap getInstance() {
   if(ftpMap==null){
    ftpMap = new FtpConnectMap();
   }
   return ftpMap;
}

/**
* 通过Name获取存在HashMap中的FTP连接对象
*
* @param name
* @return
*/
public FtpUtil getFtpUtil(String name) {
   FtpUtil ftpUtil = (FtpUtil)connectMap.get(name);
   return ftpUtil;
}

/**
* 给HashMap添加一个新的FTP连接对象
*
* @param name
* @param ftpUtil
*/
@SuppressWarnings("unchecked")
public void addFtpUtil(String name,FtpUtil ftpUtil) {
   connectMap.put(name, ftpUtil);
}

}

最后再来一个是Ftp的创建工厂

package org.javawo.components.ftp;

/**
* FTP操作工厂类,负责FTP的实例创建和其他
*
* @author 杨涛
*
*/
public class FtpFactory {

/**
* 创建一个FtpUtil的实例化对象
*
* @param ftpInfo
* @return
*/
public FtpUtil createFtpUtil(FtpInfo ftpInfo){
   /** 获取存储对象的实例*/
   FtpConnectMap ftpMap = FtpConnectMap.getInstance();
   /** 从HashMap中获取一个连接的实例化对象*/
   FtpUtil ftpUtil = ftpMap.getFtpUtil(ftpInfo.getName());
   if(ftpUtil==null) {
    try{
     /** 该连接不存在于HashMap中,实例化一个连接将此连接添加到HashMap中*/
     ftpUtil = new FtpUtil(ftpInfo);/** 实例化一个FTP连接*/
     ftpUtil.connectServer();
     ftpMap.addFtpUtil(ftpInfo.getName(),ftpUtil);
    }catch(Exception ex){
     ex.printStackTrace();
    }
   }
   return ftpUtil;
}

}

你可能感兴趣的:(自己写的FTPClient的使用)