|
项目需要实现从某银行的ftp服务器上定时下载数据文件的模块.于是使用apache的commons-net包实现ftp服务器的链接
中间使用了commons的io和Oro包.Io包封装了一些使用的方法,eg:安全的关闭各种流.根据文件的长度得到文件的方便识别的大小(k,m.g).还有一些其它使用的方法,读者可以下载后自行研究..
commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..本文使用了ftp包的功能. 代码如下:
java 代码
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.getName(); long length = remoteFiles.getSize(); String readableLength = FileUtils.byteCountToDisplaySize(length); System.out.println(name + ":\t\t" + 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的流,可以将文件下载到本地.配合正则表达式,可以实现从服务器上下载匹配规则的文件.... |
|
|