`
feidi
  • 浏览: 120719 次
社区版块
存档分类
最新评论

一个java FTP的客户端

阅读更多
使用的了apache的commons-net实现批量下载,上传,删除等功能:
java 代码
 
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.net.SocketException;  
  7. import java.util.List;  
  8. import java.util.Properties;  
  9.   
  10. import org.apache.commons.net.ftp.FTPClient;  
  11. import org.apache.commons.net.ftp.FTPFile;  
  12. import org.apache.commons.net.ftp.FTPListParseEngine;  
  13.   
  14. public class FtpClientHandler {  
  15.   
  16.     private FTPClient f              = new FTPClient();  
  17.   
  18.     private String    host           = "10.168.211.37";  
  19.   
  20.     private String    username       = "test";  
  21.   
  22.     private String    password       = "test";  
  23.   
  24.     private String    r_workDirector = "./";  
  25.   
  26.     private String    l_workDirector = "../";  
  27.   
  28.     private String    config_file    = "../config/boss-config.properties";  
  29.   
  30.     private String    remote_files   = "*";  
  31.   
  32.     private String    local_files    = "*";  
  33.   
  34.     public FtpClientHandler() throws IOException {  
  35.         super();  
  36.         init();  
  37.     }  
  38.   
  39.     public void init() throws IOException {  
  40.         FileInputStream fis = new FileInputStream(config_file);  
  41.         Properties config = new Properties();  
  42.         config.load(fis);  
  43.         host = config.getProperty("Boss_FTP_Url");  
  44.         username = config.getProperty("Username");  
  45.         password = config.getProperty("Password");  
  46.         r_workDirector = config.getProperty("Remote_workdirector");  
  47.         l_workDirector = config.getProperty("Local_workdirector");  
  48.   
  49.         remote_files = config.getProperty("Remote_download_files");  
  50.         local_files = config.getProperty("Local_upload_files");  
  51.   
  52.     }  
  53.   
  54.     private void connection() throws SocketException, IOException {  
  55.         f.connect(host);  
  56.         f.login(username,  
  57.                 password);  
  58.         f.changeWorkingDirectory(r_workDirector);  
  59.     }  
  60.   
  61.     private void close() throws IOException {  
  62.         if (f != null)  
  63.             f.disconnect();  
  64.     }  
  65.   
  66.     public void DeleteFiles() throws IOException {  
  67.         connection();  
  68.         FTPListParseEngine engine = f.initiateListParsing(remote_files);  
  69.         FTPFile[] files = engine.getFiles();  
  70.         for (int i = 0; i < files.length; i++) {  
  71.             System.out.print(i + ">>");  
  72.             System.out.println(files[i].getRawListing());  
  73.             f.dele(files[i].getName());  
  74.         }  
  75.         close();  
  76.     }  
  77.   
  78.     public void DownloadFiles() throws FileNotFoundException, IOException {  
  79.         connection();  
  80.         FTPListParseEngine engine = f.initiateListParsing(remote_files);  
  81.         FTPFile[] files = engine.getFiles();  
  82.         for (int i = 0; i < files.length; i++) {  
  83.             System.out.print(i + ">>");  
  84.             System.out.println(files[i].getRawListing());  
  85.             f.retrieveFile(files[i].getName(),  
  86.                            new FileOutputStream(new File(l_workDirector  
  87.                                    + files[i].getName())));  
  88.         }  
  89.         close();  
  90.     }  
  91.   
  92.     public void StorFiles() throws FileNotFoundException, IOException {  
  93.         connection();  
  94.         File file = new File(l_workDirector);// 在此目录中找文件  
  95.   
  96.         BFSFileSearch search = new BFSFileSearch();  
  97.         List fileList = search.scanFiles(file,  
  98.                                          local_files);  
  99.         for (int i = 0; i < fileList.size(); i++) {  
  100.             String fileName = (String) fileList.get(i);  
  101.             f.storeFile(fileName,  
  102.                         new FileInputStream(new File(l_workDirector + fileName)));  
  103.         }  
  104.         close();  
  105.     }  
  106. }  
其中利用深度搜索机制来对*,?等通配符的支持:
java 代码
 
  1. import java.io.File;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import java.util.Vector;  
  5.   
  6. public class BFSFileSearch {  
  7.     /** 
  8.      * @param fileName 
  9.      *            String 需要查找的文件,可含通配符如*.java 
  10.      * @param base 
  11.      *            File String 欲查找的文件夹 
  12.      * @param ArrayList 
  13.      *            fileList 结果集 
  14.      * @param count 
  15.      *            int 控制结果数量,为0,表示返回所有的匹配的文件 
  16.      */  
  17.     public void scanFiles(File base, String fileName, List fileList, int count) {  
  18.         Queue queue = new Queue();// 实例化队列  
  19.         queue.put(base);// 入队  
  20.         while (!queue.isEmpty()) {  
  21.             File f = (File) queue.get();// 出队列  
  22.             if (f.exists() && f.isDirectory()) {  
  23.                 String[] files = f.list();  
  24.                 for (int i = 0; i < files.length; i++) {  
  25.                     File f2 = new File(f,  
  26.                                        files[i]);  
  27.                     if (f2.isDirectory()) {// 文件夹则进队列  
  28.                         queue.put(f2);  
  29.                     } else {// 文件则进行匹配  
  30.                         String filePath = f2.getAbsolutePath();  
  31.                         filePath = filePath.substring(filePath.lastIndexOf("/") + 1);// 提取文件名  
  32.                         if (wildcardMatch(fileName,  
  33.                                           filePath)) {// 匹配成功  
  34.                             if (count != 0 && fileList.size() >= count) {  
  35.                                 return;  
  36.                             }  
  37.                             fileList.add(filePath);// 添加到结果集  
  38.                         }  
  39.                     }  
  40.                 }  
  41.             }  
  42.         }  
  43.     }  
  44.   
  45.     /** 
  46.      * overwrite method scanFiles 
  47.      * @param base 
  48.      * @param fileName 
  49.      * @return 
  50.      */  
  51.     public List scanFiles(File base, String fileName) {  
  52.         Queue queue = new Queue();// 实例化队列  
  53.         queue.put(base);// 入队  
  54.         List fileList = new ArrayList();  
  55.         while (!queue.isEmpty()) {  
  56.             File f = (File) queue.get();// 出队列  
  57.             if (f.exists() && f.isDirectory()) {  
  58.                 String[] files = f.list();  
  59.                 for (int i = 0; i < files.length; i++) {  
  60.                     File f2 = new File(f,  
  61.                                        files[i]);  
  62.                     if (f2.isDirectory()) {// 文件夹则进队列  
  63.                         queue.put(f2);  
  64.                     } else {// 文件则进行匹配  
  65.                         String filePath = f2.getAbsolutePath();  
  66.                         filePath = filePath.substring(filePath.lastIndexOf("/") + 1);// 提取文件名  
  67.                         if (wildcardMatch(fileName,  
  68.                                           filePath)) {// 匹配成功  
  69.                             fileList.add(filePath);// 添加到结果集  
  70.                         }  
  71.                     }  
  72.                 }  
  73.             }  
  74.         }  
  75.         return fileList;  
  76.     }  
  77.   
  78.     public boolean wildcardMatch(String pattern, String string) {  
  79.         int stringLength = string.length();  
  80.         int stringIndex = 0;  
  81.         for (int patternIndex = 0; patternIndex < pattern.length(); ++patternIndex) {  
  82.             char c = pattern.charAt(patternIndex);  
  83.   
  84.             if (c == '*') {  
  85.                 while (stringIndex < stringLength) {  
  86.                     if (wildcardMatch(pattern.substring(patternIndex + 1),  
  87.                                       string.substring(stringIndex))) {  
  88.                         return true;  
  89.                     }  
  90.                     ++stringIndex;  
  91.                 }// end of while  
  92.   
  93.             } else if (c == '?') {  
  94.                 ++stringIndex;  
  95.                 if (stringIndex > stringLength) {  
  96.                     return false;  
  97.                 }  
  98.   
  99.             } else {  
  100.                 if (stringIndex >= stringLength  
  101.                         || c != string.charAt(stringIndex)) {  
  102.                     return false;  
  103.                 }  
  104.                 ++stringIndex;  
  105.             }  
  106.         }  
  107.         return stringIndex == stringLength;  
  108.     }  
  109.   
  110.     class Queue {// 先进先出的队列  
  111.         private Vector vector = new Vector();  
  112.   
  113.         public void put(Object object) {// 入队  
  114.             vector.addElement(object);  
  115.         }  
  116.   
  117.         public Object get() {// 出队  
  118.             Object object = peek();  
  119.             if (object != null) {  
  120.                 vector.removeElementAt(0);  
  121.             }  
  122.             return object;  
  123.         }  
  124.   
  125.         public Object peek() {// 取队列首元素  
  126.             if (isEmpty()) {  
  127.                 return null;  
  128.             }  
  129.             return vector.elementAt(0);  
  130.         }  
  131.   
  132.         public boolean isEmpty() {// 队列是否为空  
  133.             return vector.isEmpty();  
  134.         }  
  135.   
  136.         public int size() {// 队列的大小  
  137.             return vector.size();  
  138.         }  
  139.   
  140.     }  
  141. }  
分享到:
评论

相关推荐

    java ftp客户端,服务端

    此外,Java还提供了一个名为`org.apache.commons.net.ftp`的第三方库,它简化了FTP客户端和服务端的开发。这个库包含了FTPClient和FTPServer类,提供了许多预定义的方法来处理FTP操作,如登录、上传、下载、删除文件...

    java FTP客户端程序

    在这个“java FTP客户端程序”中,我们可以深入探讨如何使用Java来编写一个FTP客户端,以及涉及到的相关知识点。 首先,我们需要了解Java中的`java.net`和`java.io`这两个核心库,它们是实现FTP客户端的基础。`java...

    基于Java的FTP客户端源代码

    总之,Java FTP客户端源代码提供了一个平台,让你可以利用Java的强大力量来实现文件的上传、下载和管理。通过学习和实践,你将能够掌握FTP通信的核心概念,并将这些知识应用到你的项目中,提升你的开发技能。

    javaFTPclient.rar_Ftp客户端__ftp_ftp客户端_ftp客户端 java_java ftp客户端

    在开发Java FTP客户端时,开发者通常会使用Apache Commons Net库,这是一个强大的Java库,提供了许多预定义的FTP操作方法。例如,`FTPClient`类是核心类,它封装了所有与FTP服务器交互的方法。开发者可以使用`...

    ftp.zip_FTP客户端程序_ftp_ftp java_ftp客户端 java_java ftp客户端

    在这个名为"ftp.zip"的压缩包中,包含了一个FTP客户端程序,它使用Java编程语言编写,能够帮助用户实现文件的上传和下载功能。这个客户端程序非常实用,因为只需要安装JDK(Java Development Kit)就可以运行,无需...

    ftp客户端11.rar_JAVA访问 FTP_ftp客户端_ftp客户端 java_java ftp客户端_java 上传下载

    Java提供了一个内置的`java.net.Socket`类,可以用于实现FTP协议,但更常见的是使用`java.net.URL`和`java.net.URLConnection`类,或者使用Apache Commons Net库,该库提供了更完善的FTP客户端功能,包括文件上传、...

    java_ftp2.zip_FTP客户端程序_ftp_ftp java_ftp客户端 java_java ftp客户端

    在这个名为"java_ftp2.zip"的压缩包中,我们可以推测包含了一个使用Java编写的FTP客户端程序的相关资源。 首先,FTP客户端程序的核心功能包括连接到FTP服务器,登录验证,浏览服务器目录,下载或上传文件,以及断开...

    Javaftp 客户端

    在实际项目中,JavaFTP客户端通常会封装成一个易于使用的类或服务,以供其他模块调用。例如,`JMyFtpClient`可能是一个自定义的FTP客户端实现,提供了简洁的接口供开发者进行文件操作。 总结来说,JavaFTP客户端是...

    基于java的ftp客户端设计与实现

    本项目旨在提供一个基于Java的FTP客户端,以满足用户对远程文件系统的访问需求。以下是对这个项目的详细解读: 1. FTP协议基础: FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器获取文件或向其...

    ftp.rar_FTP CLIENT_ftp java_ftp客户端_ftp客户端 java_客户端

    在这个"ftp.rar"压缩包中,我们关注的是一个用Java语言实现的FTP客户端。Java是一种跨平台的编程语言,它提供了丰富的库和API,使得开发FTP客户端成为可能。 FTP客户端是允许用户连接到FTP服务器并执行各种操作,...

    FTP.rar_FTP 服务端_ftp 客户 端与 服务端_ftp客户端 java_java ftp客户端

    在本文中,我们将深入探讨FTP服务端、FTP客户端以及如何在Java环境中实现FTP客户端。 FTP服务端是运行在服务器上的软件,它接收来自客户端的连接请求,处理文件传输操作,并管理用户权限。在Java中,可以使用Apache...

    Java开发FTP客户端

    通过以上知识点,我们可以构建一个功能完备的Java FTP客户端,实现文件的上传、下载以及目录管理等功能,满足日常的文件传输需求。在开发过程中,要注重代码的可读性、可维护性和安全性,以适应不同的使用场景。

    一个很好的java编写的ftp客户端

    7. **第三方库**:`edtftpj-1.5.2`可能是一个FTP库,如EDTFTPj,这是一个Java FTP/FTPS库,提供了异步和同步操作,支持各种FTP特性。使用这样的库可以简化FTP客户端的开发,提供更高级的功能和更好的性能。 在开发...

    JAVA swing (MVC)FTP客户端 (2)_javaftp客户端_familiarku3_

    此项目“JAVA Swing (MVC) FTP客户端”是基于Swing和FTP协议创建的一个桌面应用程序,它允许用户进行基本的FTP(File Transfer Protocol)操作,如上传、下载文件,并能展示上传和下载的速度。下面将详细解析这个...

    java ftp客户端

    ftp客户端 java编写 基于apache组件

    课程设计基于GUI的FTP客户端的实现JAVA(txt为微云链接)

    1.实现一个图形用户界面的FTP客户端。 2.功能: 2.1 配置使用IIS的FTP服务器; 2.2 客户端发出各种操作命令;至少实现conn(连接)、list(列示文件)、retr(下载)、store(上载)的功能。 2.3 接收服务器的...

    javaftp客户端源码.pdf

    总之,这段Java代码展示了如何使用内置的`FtpClient`实现一个简单的FTP客户端,执行基本的文件上传和下载任务。然而,为了在生产环境中构建可靠的FTP客户端,可能需要考虑更多的异常处理、错误报告、连接重试机制...

    课程设计基于GUI的FTP客户端JAVA源码

    1.实现一个图形用户界面的FTP客户端。 2.功能: 2.1 配置使用IIS的FTP服务器; 2.2 客户端发出各种操作命令;至少实现conn(连接)、list(列示文件)、retr(下载)、store(上载)的功能。 2.3 接收服务器的...

    ftp客户端源码 java实现

    本项目名为“ftp客户端源码 java实现”,提供了一个简单易用的FTP客户端示例,适用于学习和开发用途。 FTP客户端的基本功能包括连接到FTP服务器、登录、上传文件、下载文件、列出目录内容、创建或删除远程目录等。...

Global site tag (gtag.js) - Google Analytics