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

本文介绍如何利用Apache Commons Net库实现FTP服务器的连接与文件列表获取功能,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需要实现从某银行的ftp服务器上定时下载数据文件的模块.于是使用apache的commons-net包实现ftp服务器的链接

中间使用了commons的io和Oro包.Io包封装了一些使用的方法,eg:安全的关闭各种流.根据文件的长度得到文件的方便识别的大小(k,m.g).还有一些其它使用的方法,读者可以下载后自行研究..

commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..本文使用了ftp包的功能. 代码如下:

 

import java.io.IOException;    
import java.io.OutputStream;    
   
import org.apache.commons.io.FileUtils;    
import org.apache.commons.io.IOUtils;    
import org.apache.commons.net.ftp.FTPClient;    
import org.apache.commons.net.ftp.FTPFile;    
   
/**   
 * 使用commons的net包进行ftp链接.   
 * 相关包:commons-net-1.4.1.jar ; commons-io-1.2.jar;jakarta-oro-2.0.8.jar测试通过.可以列出ftp上的文件   
 * 通过把ftp服务器上的文件流连接到outSteam及可以把文件下载到本机的目录..限制如果目录为中文则需要处理.最好使用英文文件名   
 * 
@author xzgf   
 * email:  
 * 
  
 * @create 2007-2-11   
 *   
 
*/
   
public class ListFtpFile {    
   
    
private FTPClient ftpClient = new FTPClient();    
        
    
private OutputStream outSteam = null;    
        
    
/**   
     * ftp服务器地址   
     
*/
   
    
private String hostName = "127.0.0.1";    
        
    
/**   
     * 登录名   
     
*/
   
    
private String userName = "1";    
        
    
/**   
     * 登录密码   
     
*/
   
    
private String password = "1";    
        
    
/**   
     * 需要访问的远程目录   
     
*/
   
    
private String remoteDir = "/ClientTest";    
        
    
/**   
     * 登录方法   
     *   
     
*/
   
    
private void login() {    
        
try {    
            
//链接到ftp服务器    
            ftpClient.connect(hostName);    
            System.out.println(
"连接到ftp服务器:" + hostName + " 成功..开始登录");    
            
//登录.用户名 密码    
            ftpClient.login(userName, password);    
            System.out.println(
"登录成功.");    
                
            FTPFile[] remoteFiles 
= ftpClient.listFiles(remoteDir);    
            System.out.println(
"目录" + remoteDir + "下的文件:");    
            
if(remoteFiles != null{    
                
for(int i=0;i 
                    String name 
= remoteFiles[i].getName();    
                    
long length = remoteFiles[i].getSize();    
                    String readableLength 
= FileUtils.byteCountToDisplaySize(length);    
                    System.out.println(name 
+ ": " + readableLength);    
                }
    
            }
    
                
        }
 catch (Exception e) {    
            e.printStackTrace();    
        }
 finally {    
            
//使用IO包关闭流    
            IOUtils.closeQuietly(outSteam);    
            
try {    
                ftpClient.disconnect();    
            }
 catch (IOException ioe) {    
                ioe.printStackTrace();    
            }
    
        }
    
    }
    
        
    
public static void main(String[] args) {    
        ListFtpFile listFtpfiles 
= new ListFtpFile();    
        listFtpfiles.login();    
    }
    
}    

 

寥寥几行实现了ftp服务器某个目录下的所有文件.当然本例中没有处理中文的问题,所以如果ftp上存在中文目录,则会出现乱码.

通过获得ftp的流,可以将文件下载到本地.配合正则表达式,可以实现从服务器上下载匹配规则的文件....

欢迎交流..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值