`
zimo888
  • 浏览: 13786 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用commons-net包实现ftp服务器的访问

阅读更多
import   java.io.InputStream;
import  java.util.Properties;

import  org.apache.commons.net.ftp.FTPClient;
import  org.apache.commons.net.ftp.FTPClientConfig;
import  org.apache.commons.net.ftp.FTPReply;
import  org.uranus.util.StringUtils;

/** */ /**
* 基于apache组织的commonNet开源组件实现ftp客户端<br>
* 本程序运行依赖于一个config成员变量属性,其是一个属性(Properties)对象<br>
* 系统要求这个config对象,必需有如下属性key:<br>
* server(ftp服务器ip地址或域名)<br>
* username(登录用户名)<br>
* password(登录密码)<br>
* 如下属性key是可选的:<br>
* systemKey(ftp服务器的操作系统key,如window)<br>
* serverLanguageCode(ftp服务器使用的语言,如zh)<br>
* <br>
* 本程序是线程安全,在每一个上传时都将创建ftp连接,上传结束后再关闭ftp连接<br>
*
* 例子:<br>
* InputStream localIn = new FileInputStream("c:\\计算机.txt");<br>
*
* java.util.Properties config = new Properties();<br>
* config.setProperty("server", "192.168.5.120");<br>
* config.setProperty("username", "upload");<br>
* config.setProperty("password", "upload");<br>
*
* FtpClientCommonNetImpl client = new FtpClientCommonNetImpl();<br>
* client.setConfig(config);<br>
* client.upload(localIn, "/aaa/计算机.txt", true);<br>
*
*
*  @author  zhangdb
*
*/
public   class  FtpClientCommonNetImpl  implements  IFtpClient  {
//  ftp配置
private  Properties config;

/** */ /**
* 连接到ftp服务器
*
*  @param  server
*  @param  userName
*  @param  password
*  @return
*  @throws  FtpException
*/
protected  FTPClient connectFtpServer(String server, String userName,
String password)  throws  FtpException  {
//  创建ftp客户端对象
FTPClient ftp  =   new  FTPClient();
try   {
ftp.configure( this .getFTPClientConfig());
//  连接ftp服务器
ftp.connect(server);
//  登录
ftp.login(userName, password);

//  返回值
int  reply  =  ftp.getReplyCode();
if  (( ! FTPReply.isPositiveCompletion(reply)))  {
ftp.disconnect();
throw   new  FtpException( " 登录ftp服务器失败,请检查server[ "   +  server
+   " ]、username[ "   +  userName  +   " ]、password[ "   +  password
+   " ]是否正确! " );
}

return  ftp;
}   catch  (Exception ex)  {
throw   new  FtpException(ex);
}
}

/** */ /**
* 关闭连接
*
*  @param  ftp
*/
protected   void  disconnectFtpServer(FTPClient ftp)  {
try   {
ftp.logout();
ftp.disconnect();
}   catch  (Exception ex)  {
throw   new  FtpException(ex);
}
}

/** */ /**
* 上传
*/
public   void  upload(InputStream localIn, String remoteFilePath)
throws  FtpException  {
String server  =   this .config.getProperty( " server " );
String userName  =   this .config.getProperty( " username " );
String password  =   this .config.getProperty( " password " );
FTPClient ftp  =   this .connectFtpServer(server, userName, password);

try   {
boolean  result  =  ftp.storeFile( this
.enCodingRemoteFilePath(remoteFilePath), localIn);
if  ( ! result)  {
throw   new  FtpException( " 文件上传失败! " );
}
}   catch  (Exception ex)  {
throw   new  FtpException(ex);
}   finally   {
this .disconnectFtpServer(ftp);
}
}

/** */ /**[来源www.iocblog.net]
* 上传结束以后关闭输入流
*
*  @param  localIn
*  @param  remoteFilePath
*  @param  afterUploadCloseInputStream
*  @throws  FtpException
*/
public   void  upload(InputStream localIn, String remoteFilePath,
boolean  afterUploadCloseInputStream)  throws  FtpException  {
try   {
//  上传
this .upload(localIn, remoteFilePath);
}   finally   {
if  (afterUploadCloseInputStream)  {
if  (localIn  !=   null )  {
try   {
localIn.close();
}   catch  (Exception ex)  {
throw   new  FtpException(ex);
}
}
}
}
}[来源www.iocblog.net]

/** */ /**
* 得到配置
*
*  @return
*/
protected  FTPClientConfig getFTPClientConfig()  {
//  创建配置对象
FTPClientConfig conf  =   new  FTPClientConfig( this .config.getProperty(
" systemKey " , FTPClientConfig.SYST_NT));
conf.setServerLanguageCode( this .config.getProperty(
" serverLanguageCode " ,  " zh " ));
return  conf;
}

/** */ /**
* 远程文件路径编码(上传到ftp上的文件路径)
*
*  @param  remoteFilePath
*  @return
*/
protected  String enCodingRemoteFilePath(String remoteFilePath)  {
return  StringUtils.gbkToIso8859EnCoding(remoteFilePath);
}

public  Properties getConfig()  {
return  config;
}

public   void  setConfig(Properties config)  {
this .config  =  config;
}



分享到:
评论

相关推荐

    commons-net-3.1.jar,3.3,3.6版本

    这个库在不同的版本中提供了各种功能的增强和优化,比如`commons-net-3.1.jar`, `commons-net-3.3.jar`, 和 `commons-net-3.6.jar`。下面将详细阐述这些版本中涉及的主要知识点: 1. **FTP(文件传输协议)支持**:...

    commons-io-1.4.jar等

    JAVA连接FTP服务器,并上传/下载文件的,使用commons-net包实现ftp服务器的访问,commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..相关包:commons-net-1.4.1.jar ; commons-io-1.4.jar;jakarta-oro-2.0.8.jar

    commons-net-3.3源码包

    在这个"commons-net-3.3源码包"中,我们可以深入理解其实现细节,对其进行定制和扩展,这对于开发人员来说非常有用。下面我们将详细探讨此源码包中的关键知识点。 1. **FTP协议实现**: Commons Net库的核心功能之...

    java commons-net 类库

    无论是在构建FTP服务器客户端、实现网络诊断工具,还是处理其他网络通信需求,Java Commons-Net都是一个强大且可靠的工具。通过阅读提供的`commons-net-3.3.jar`文件,开发者可以直接将该库导入项目中,开始利用其...

    commons-net

    在FTP方面,commons-net提供了`FTPClient`类,这是一个功能强大的类,可以用于连接FTP服务器,执行上传、下载、删除文件,创建或删除目录等操作。例如,你可以使用`connect()`方法建立连接,`login()`方法进行身份...

    ftp所需jar包(commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar)

    在这个场景中,我们关注的是两个特定的Java库文件:`commons-net-1.4.1.jar` 和 `jakarta-oro-2.0.8.jar`,它们是实现FTP功能的关键组件。 `commons-net-1.4.1.jar` 是Apache Commons Net库的一个版本,这是一个...

    com.jcraft.jschjar和commons-net

    总结来说,"com.jcraft.jsch.jar"和"commons-net"是Java开发中处理网络通信特别是SSH和FTP任务的重要工具,而.NET平台也有类似的功能实现,为不同平台的开发者提供了丰富的网络通信解决方案。了解并熟练运用这些库,...

    commons-net-3.2

    通过使用FTPClient类,开发者可以方便地与FTP服务器进行交互,实现文件的高效传输。此外,FTPFile类则用于表示FTP服务器上的文件和目录信息,提供了丰富的属性和方法来获取文件的详细信息。 SMTP(简单邮件传输协议...

    aduna-commons-net-2.1.jar.zip

    这个库,以"aduna-commons-net-2.1.jar.zip"的形式提供,包含了丰富的网络编程接口和实现,为开发者提供了强大的网络操作支持。 Aduna Commons Net是Apache软件基金会的一个项目,其核心目标是为Java开发者提供一组...

    commons-logging-1.2.jar commons-vfs-2.2.jar

    使用Apache Commons VFS的SFTP模块,开发者可以轻松地在代码中实现对远程SFTP服务器的文件操作,例如上传、下载、列出目录内容、重命名或删除文件等,而无需关心具体的文件系统细节。Apache Commons Logging则负责...

    commons-net-3.3

    在使用`commons-net-3.3.jar`时,确保将其添加到项目的类路径或依赖管理中。如果你使用的是Maven或Gradle,可以将Apache Commons Net作为依赖添加到构建文件中,以便自动下载和管理库。 总的来说,Apache Commons ...

    commons-net-1.4.1.jar

    这个库的核心版本是`commons-net-1.4.1.jar`,它包含了丰富的类和方法,使得开发者能够方便地实现各种网络功能。 在`commons-net-1.4.1.jar`中,我们可以找到许多关键组件,包括: 1. **FTP(文件传输协议)**: 这...

    commons-vfs-1.0-src

    `FileSystem`表示一个具体的文件系统,如本地文件系统或FTP服务器;`FileSystemManager`则是管理这些文件系统的工厂类,负责创建和配置文件系统。 2. **协议支持**:VFS的设计允许扩展以支持多种协议,如`file:`、`...

    commons-net源码包

    1. **FTP协议实现**:Apache Commons Net包含了一个完整的FTP客户端库,支持主动和被动模式,断点续传,FTP上传和下载,以及FTP服务器的命令交互。源码中`org.apache.commons.net.ftp`包下的类,如`FTP`、`FTPClient...

    commons-net-3.4-src.zip

    接着,`TelnetClient`类实现了Telnet协议,用于远程终端访问。源码中,它处理了诸如IAC(Inter-Active Command)这样的特殊字符,以实现不同终端环境下的字符编码和控制序列的处理。`TelnetOptionHandler`接口和相关...

    ant-commons-net-1.7.0.jar.zip

    `ant.license.txt`文件通常包含Apache软件基金会项目的许可证信息,它详细说明了如何使用、修改和分发`ant-commons-net-1.7.0.jar`的条款。Apache Commons Net遵循Apache License Version 2.0,这是一个非常宽松的...

    aduna-commons-net-2.2.jar.zip

    例如,一个需要从FTP服务器下载大量文件的应用,可以通过Aduna Commons Net的FTP客户端轻松实现;又如,一个需要监控网络状态并找出开放端口的系统,可以利用其端口扫描功能。 总之,"aduna-commons-...

    apache-commons-net-3.0.1-src

    "apache-commons-net-3.0.1-src"是一个源代码版本,允许开发者深入理解其内部工作原理,并根据需要进行定制或扩展。 FTP(File Transfer Protocol)是互联网上最常用的文件传输协议之一,Apache Commons Net提供了...

    commons-net压缩包

    通过`FTPClient`类,开发者可以方便地实现FTP交互,而`FTPFile`类则代表FTP服务器上的文件或目录信息。 **Telnet协议支持**: 对于需要与远程服务器进行Telnet通信的应用,Apache Commons Net提供了`TelnetClient`...

    ant-commons-net-1.6.2.jar.zip

    在Ant中,这个库被用来处理与网络相关的任务,例如上传或下载文件到FTP服务器,发送电子邮件,或者访问其他网络服务。 "ant-commons-net-1.6.2.jar"是这个库的特定版本,版本号1.6.2。这个JAR文件包含了所有必要的...

Global site tag (gtag.js) - Google Analytics