项目需要实现从某银行的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;
-
-
-
-
-
-
-
-
-
-
-
- public class ListFtpFile {
-
- private FTPClient ftpClient = new FTPClient();
-
- private OutputStream outSteam = null;
-
-
-
-
- private String hostName = "127.0.0.1";
-
-
-
-
- private String userName = "1";
-
-
-
-
- private String password = "1";
-
-
-
-
- private String remoteDir = "/ClientTest";
-
-
-
-
-
- private void login() {
- try {
-
- 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 + ":\t\t" + readableLength);
- }
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
-
- 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的流,可以将文件下载到本地.配合正则表达式,可以实现从服务器上下载匹配规则的文件....
posted @ 2007-07-29 01:33
cppguy 阅读(632)
评论(0) 编辑 收藏 所属分类:
垂直搜索