`

自己写的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写的java FTP工具

    Java FTP工具的开发通常涉及到对`FtpClient`库的使用,这是一个常见的开源库,例如Apache Commons Net。这个库提供了丰富的API,使得开发者能够轻松地实现FTP(文件传输协议)客户端的功能,包括上传、下载、删除...

    .NET下的FtpClient类

    因为开发一个项目要用到FTP上传功能,用的是.NET平台,当时找了半天也没有关于FTP的类,索性就自己写了一个。找了很多资料,并参考了一下Java的sun.net.FtpClient类,总算可以拿出来用,所以就迫不及待的传上来给大家...

    System.Net.FtpClient.dll

    C#的FTP操作类库,支持FTP...如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用。 那就是System.Net.FtpClient,链接地址:https://netftp.codeplex.com

    FtpClient(源码)

    FTP协议使用ASCII或二进制模式传输数据,FTPClient程序需要根据文件类型选择合适的模式。此外,FTP有主动和被动两种模式,主动模式下,服务器主动连接客户端的数据端口,而在被动模式下,客户端需要向服务器请求一个...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...

    ftpClient客户端

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个QT和C++编写的`...通过学习和使用`ftpClient`,开发者可以深入理解FTP协议的工作原理,同时掌握QT库在实际项目中的应用。

    解决ftpClient.listFiles()结果为空的问题

    CentOS某些版本中,JAVA代码执行ftpClient.listFiles()有时结果为空。本项目解决了这个问题。具体代码思路可以参考博客:http://blog.csdn.net/yingprince/article/details/51275956

    c# socket编程实例二 FTPclient源码

    通过对"FTPClient"源码的学习,开发者不仅可以深入理解C#的Socket编程,还能掌握FTP协议的工作原理,这对构建自己的网络应用程序是非常有价值的。在实际应用中,还可以进一步扩展,例如添加SSL/TLS支持以实现FTPS...

    C语言写的FTPclient

    9. **安全性**:现代FTP客户端常常使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)以提供加密的数据传输,增加安全性。但C语言实现这些安全特性需要额外的库支持,如OpenSSL。 通过学习和分析这...

    QT实现FTPServer和FTPClient.zip

    在本文中,我们将深入探讨如何使用Qt框架来实现一个FTPServer和FTPClient。Qt是一个跨平台的应用程序开发框架,广泛用于C++编程,提供丰富的图形用户界面(GUI)功能和网络通信支持,使得开发FTP服务变得相对简单。 ...

    FTPClient.rar

    标题中的“FTPClient.rar”指的是一个使用RAR格式压缩的文件,该文件包含了作者自行开发的FTP客户端程序。FTP,即文件传输协议(File Transfer Protocol),是互联网上用于在不同计算机之间传输文件的标准协议。FTP...

    FTPClient所需jar包以及上传样例代码,commons net 3.6

    JAVA操作ftp服务器,...里面有一个本人自己写的样例,没有工厂类等其他方法,直接一个主函数下来,简单粗暴易懂。如果需要官方提供的源码以及样例,请移步https://download.csdn.net/download/yizhijiaozi/10809886

    ftpserver and ftpclient传输文件

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个场景中,我们关注的是基于Java的...通过理解这些核心概念,开发者可以构建自己的简单FTP服务,实现定制化的文件传输需求。

    根据lwip的raw API编写的ftpclient代码

    在使用LWIP的raw API编写FTP客户端时,需要理解FTP协议的命令和响应格式,以及如何通过TCP连接建立和管理这两个通道。 首先,我们需要创建控制连接,发送FTP命令如"USER"、"PASS"进行身份验证,然后可能需要发送...

    C#版的FtpClient客户端(Socket实现)(可以登陆WinDows,Linux系FTP

    curFtpClent = new FtpClient(); //HostURL curFtpClent.HostUrl = this._NfitsConfigDataCopy.DownloadURI; //サーバのサーバフォルダ curFtpClent.RemotesubDir = genreInfo.GetDownDir(); //ログインユーザ...

    自己写的用Java操作FTP的上传下载等

    在Java中建立FTP连接,我们需要创建`FTPClient`对象,并使用`connect()`方法连接到FTP服务器。然后,使用`login()`方法登录到FTP服务器,提供用户名和密码。例如: ```java FTPClient ftpClient = new FTPClient...

    Java读写文件及FTP例子.docx

    FTPClient ftpClient = new FTPClient(); ftpClient.connect(ip, port); boolean login = ftpClient.login(user, pwd); ``` - 验证连接是否成功: ```java int replyCode = ftpClient.getReplyCode(); if (!...

    Java FtpClient 实现文件上传服务

    在本文中,我们将重点讨论如何使用Java FtpClient 实现文件上传服务,特别是针对图片的上传,并解决配置过程中可能遇到的文件权限问题。 首先,我们需要在服务器端安装FTP服务。在这个例子中,我们选择了Ubuntu系统...

    FTP client简单C实现

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个“FTP client简单C实现”项目中,我们关注的是如何用C语言编写一个基础的FTP客户端。C语言是一种底层、高效的编程语言...

Global site tag (gtag.js) - Google Analytics