`

java apache 实现 ftp 上传下载

    博客分类:
  • FTP
阅读更多
.

最近写了一个FTP客服端的程序,可以实现上传,下载,列出文件,删除文件,重命名文件操作。

     SUN也提供了FTP操作的包,但是官方建议不要使用,而且没有API文档。另外IBM和APACHE也提供了相应的FTP包,APACHE的包功能比较强大,IBM的没有用过,不知道怎样。

     我把我的代码贴出来,希望和大家一起交流。

package woxingwosu;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Properties;
import java.util.TreeSet;

import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
* 其实JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并没有提供相应文档,
* 因为这里面的包,不被官方支持,建议不要使用。我们可以使用第三方提供的包apache.commons。
* apache.commons的包,都有文档,方便使用
* 另外IBM也有提供一个ftp包,我没有用过,有兴趣的可以去研究一下
* @commons-net:http://apache.mirror.phpchina.com/commons/net/binaries/commons-net-1.4.1.zip
* @jakarta-oro:http://mirror.vmmatrix.net/apache/jakarta/oro/source/jakarta-oro-2.0.8.zip
* @commons-io:http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip
* @author 我行我素
* @2007-08-03
*/
public class MiniFtp {
    private static String username;
    private static String password;
    private static String ip;
    private static int port;
    private static Properties property=null;//配置
    private static String configFile;//配置文件的路径名
   
    private static FTPClient ftpClient=null;
    private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm");
   
    private static final String [] FILE_TYPES={"文件","目录","符号链接","未知类型"};
   
    public static void main(String[] args) {
         setConfigFile("woxingwosu.properties");//设置配置文件路径
         connectServer();
         listAllRemoteFiles();//列出所有文件和目录
         changeWorkingDirectory("webroot");//进入文件夹webroot
         listRemoteFiles("*.jsp");//列出webroot目录下所有jsp文件
         setFileType(FTP.BINARY_FILE_TYPE);//设置传输二进制文件
         uploadFile("woxingwosu.xml","myfile.xml");//上传文件woxingwosu.xml,重新命名为myfile.xml
         renameFile("viewDetail.jsp", "newName.jsp");//将文件viewDetail.jsp改名为newName.jsp
         deleteFile("UpdateData.class");//删除文件UpdateData.class
         loadFile("UpdateData.java","loadFile.java");//下载文件UpdateData.java,并且重新命名为loadFile.java
         closeConnect();//关闭连接
     }
   
    /**
      * 上传文件
      * @param localFilePath--本地文件路径
      * @param newFileName--新的文件名
     */
    public static void uploadFile(String localFilePath,String newFileName){
         connectServer();
        //上传文件
         BufferedInputStream buffIn=null;
        try{
             buffIn=new BufferedInputStream(new FileInputStream(localFilePath));
             ftpClient.storeFile(newFileName, buffIn);
         }catch(Exception e){
             e.printStackTrace();
         }finally{
            try{
                if(buffIn!=null)
                     buffIn.close();
             }catch(Exception e){
                 e.printStackTrace();
             }
         }
     }
   
    /**
      * 下载文件
      * @param remoteFileName --服务器上的文件名
      * @param localFileName--本地文件名
     */
    public static void loadFile(String remoteFileName,String localFileName){
         connectServer();
        //下载文件
         BufferedOutputStream buffOut=null;
        try{
             buffOut=new BufferedOutputStream(new FileOutputStream(localFileName));
             ftpClient.retrieveFile(remoteFileName, buffOut);
         }catch(Exception e){
             e.printStackTrace();
         }finally{
            try{
                if(buffOut!=null)
                     buffOut.close();
             }catch(Exception e){
                 e.printStackTrace();
             }
         }
     }
   
    /**
      * 列出服务器上所有文件及目录
     */
    public static void listAllRemoteFiles(){
         listRemoteFiles("*");
     }

    /**
      * 列出服务器上文件和目录
      * @param regStr --匹配的正则表达式
     */
     @SuppressWarnings("unchecked")
    public static void listRemoteFiles(String regStr){
         connectServer();
        try{
             FTPFile[] files=ftpClient.listFiles(regStr);
            if(files==null||files.length==0)
                 System.out.println("There has not any file!");
            else{
                 TreeSet<FTPFile> fileTree=new TreeSet(
                        new Comparator(){
                            //先按照文件的类型排序(倒排),然后按文件名顺序排序
                            public int compare(Object objFile1,Object objFile2){
                                if(objFile1==null)
                                    return -1;
                                else if(objFile2==null)
                                    return 1;
                                else{
                                     FTPFile file1=(FTPFile)objFile1;
                                     FTPFile file2=(FTPFile)objFile2;
                                    if(file1.getType()!=file2.getType())
                                        return file2.getType()-file1.getType();
                                    else
                                        return file1.getName().compareTo(file2.getName());
                                 }
                             }
                         }
                 );
                for(FTPFile file:files)
                     fileTree.add(file);
                 System.out.printf("%-35s%-10s%15s%15s\n","名称","类型","修改日期","大小");
                for(FTPFile file:fileTree){
                     System.out.printf("%-35s%-10s%15s%15s\n",iso8859togbk(file.getName()),FILE_TYPES[file.getType()]
                             ,dateFormat.format(file.getTimestamp().getTime()),FileUtils.byteCountToDisplaySize(file.getSize()));
                 }
             }
         }catch(Exception e){
             e.printStackTrace();
         }
     }
   
    /**
      * 关闭连接
     */
    public static void closeConnect(){
        try{
            if(ftpClient!=null){
                 ftpClient.logout();
                 ftpClient.disconnect();
             }
         }catch(Exception e){
             e.printStackTrace();
         }
     }
   
    /**
      * 设置配置文件
      * @param configFile
     */
    public static void setConfigFile(String configFile) {
         MiniFtp.configFile = configFile;
     }
   
    /**
      * 设置传输文件的类型[文本文件或者二进制文件]
      * @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE
     */
    public static void setFileType(int fileType){
        try{
             connectServer();
             ftpClient.setFileType(fileType);
         }catch(Exception e){
             e.printStackTrace();
         }
     }
   
    /**
      * 扩展使用
      * @return
     */
    protected static FTPClient getFtpClient(){
         connectServer();
        return ftpClient;
     }

    /**
      * 设置参数
      * @param configFile --参数的配置文件
     */
    private static void setArg(String configFile){
         property=new Properties();
         BufferedInputStream inBuff=null;
        try{
             inBuff=new BufferedInputStream(new FileInputStream(configFile));
             property.load(inBuff);
             username=property.getProperty("username");
             password=property.getProperty("password");
             ip=property.getProperty("ip");
             port=Integer.parseInt(property.getProperty("port"));
         }catch(Exception e){
             e.printStackTrace();
         }finally{
            try{
                if(inBuff!=null)
                     inBuff.close();
             }catch(Exception e){
                 e.printStackTrace();
             }
         }
     }
   
    /**
      * 连接到服务器
     */
    public static void connectServer() {
        if (ftpClient == null) {
            int reply;
            try {
                 setArg(configFile);
                 ftpClient=new FTPClient();
                 ftpClient.setDefaultPort(port);
                 ftpClient.configure(getFtpConfig());
                 ftpClient.connect(ip);
                 ftpClient.login(username, password);
                 ftpClient.setDefaultPort(port);
                 System.out.print(ftpClient.getReplyString());
                 reply = ftpClient.getReplyCode();

                if (!FTPReply.isPositiveCompletion(reply)) {
                     ftpClient.disconnect();
                     System.err.println("FTP server refused connection.");
                 }
             } catch (Exception e) {
                 System.err.println("登录ftp服务器【"+ip+"】失败");
                 e.printStackTrace();
             }
         }
     }
   
    /**
      * 进入到服务器的某个目录下
      * @param directory
     */
    public static void changeWorkingDirectory(String directory){
        try{
             connectServer();
             ftpClient.changeWorkingDirectory(directory);
         }catch(IOException ioe){
             ioe.printStackTrace();
         }
     }
   
    /**
      * 返回到上一层目录
     */
    public static void changeToParentDirectory(){
        try{
             connectServer();
             ftpClient.changeToParentDirectory();
         }catch(IOException ioe){
             ioe.printStackTrace();
         }
     }
   
    /**
      * 删除文件
     */
    public static void deleteFile(String filename){
        try{
             connectServer();
             ftpClient.deleteFile(filename);
         }catch(IOException ioe){
             ioe.printStackTrace();
         }
     }
   
    /**
      * 重命名文件
      * @param oldFileName --原文件名
      * @param newFileName --新文件名
     */
    public static void renameFile(String oldFileName,String newFileName){
        try{
             connectServer();
             ftpClient.rename(oldFileName, newFileName);
         }catch(IOException ioe){
             ioe.printStackTrace();
         }
     }
   
    /**
      * 设置FTP客服端的配置--一般可以不设置
      * @return
     */
    private static FTPClientConfig getFtpConfig(){
         FTPClientConfig ftpConfig=new FTPClientConfig(FTPClientConfig.SYST_UNIX);
         ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
        return ftpConfig;
     }
   
    /**
      * 转码[ISO-8859-1 ->   GBK]
      *不同的平台需要不同的转码
      * @param obj
      * @return
     */
    private static String iso8859togbk(Object obj){
        try{
            if(obj==null)
                return "";
            else
                return new String(obj.toString().getBytes("iso-8859-1"),"GBK");
         }catch(Exception e){
            return "";
         }
     }

}



//////////////////////////////////////////////////////////////////

配置文件[woxingwosu.properties]


ip:192.168.168.168
username:admin
password:8008
port:21


分享到:
评论

相关推荐

    JAVA实现ftp上传,下载

    在FTP上传下载任务中,可能会涉及到XML文件的处理。Java提供了DOM、SAX和StAX三种主要的XML解析方式。 1. DOM(Document Object Model)解析:一次性加载整个XML文档到内存,形成一棵树形结构,方便遍历和查询。...

    用JAVA实现Ftp文件上传下载

    在`TestFtpUpload`文件中,可以编写单元测试或集成测试来验证FTP上传和下载功能。例如,你可以创建一个测试类`FtpOperationsTest`,包含如下方法: ```java import org.junit.jupiter.api.Test; import org.apache....

    java实现ftp上传下载

    Java实现FTP上传下载是Java开发中常见的任务,主要用于在服务器和客户端之间传输文件。FTP(File Transfer Protocol)是一种用于在Internet上进行文件传输的标准协议。本篇将详细讲解如何使用Java来实现FTP的上传和...

    Java实现FTP文件上传和下载

    总结,Java实现FTP文件上传和下载涉及的主要知识点包括:FTP协议基础,Apache Commons Net库的使用,FTPClient对象的配置与操作,以及相关的文件流处理和错误处理机制。理解并熟练掌握这些内容,将有助于你在实际...

    Java实现FTP上传与下载

    这篇博客“Java实现FTP上传与下载”可能详细介绍了如何利用Java来实现FTP客户端的功能,包括文件的上传和下载。这里我们将深入探讨Java中实现FTP操作的核心知识点。 首先,Java通过`commons-net`库提供了对FTP的...

    JAVA实现简单的对FTP上传与下载

    总的来说,使用Java实现FTP上传和下载涉及网络通信、文件操作和错误处理等多个方面的知识。通过"ftpLoadDown.jar"库,我们可以简化这个过程,使得开发者可以专注于业务逻辑,而无需关心底层的FTP协议细节。在实际...

    java实现ftp上传jar包

    以上就是关于"java实现ftp上传jar包"的相关知识点,涵盖了FTP协议、相关库的使用、JAR文件的处理以及基本的Java FTP操作。在实际项目中,你可能还需要考虑其他因素,如连接超时、重试策略、文件权限管理等。

    java写的FTP上传下载工具(支持多用户)

    Java编写的FTP上传下载工具是一种基于Java语言实现的文件传输应用程序,主要功能是与FTP(File Transfer Protocol)服务器进行交互,实现文件的上传和下载。这个工具特别之处在于它支持多用户登录,这意味着不同的...

    java实现ftp上传和下载文件功能.

    在Java中实现FTP(文件传输协议)上传和下载文件功能,通常会使用Apache Commons Net库。这个库提供了FTPClient类,使得与FTP服务器交互变得简单。以下是对代码中涉及的知识点的详细解释: 1. **Apache Commons Net...

    java实现的ftp文件上传

    在IT行业中,FTP(File Transfer ...总的来说,Java通过Apache Commons Net库为开发者提供了简单易用的接口来实现FTP文件上传。通过理解这些类和方法,开发者可以构建可靠的FTP客户端应用程序,满足各种文件传输需求。

    java多线程ftp 上传下载

    以下是一些关于使用Java多线程FTP上传和下载的关键知识点: 1. **FTPClient初始化**:创建`FTPClient`对象,并设置连接参数,如主机名、端口号、用户名和密码。使用`connect()`方法建立与FTP服务器的连接,然后调用...

    java 实现ftp上传下载

    总结来说,Java实现FTP上传下载涉及连接管理、文件操作、多线程处理、异常处理等多个方面。使用Apache Commons Net库能简化这些操作,但正确地处理细节和异常情况仍然至关重要。通过理解和实践这些知识点,你将能够...

    Domino_java代理实现FTP上传下载

    ### Domino Java 代理实现 FTP 上传下载 #### 知识点概述 在当前的企业级应用环境中,文件传输协议(FTP)依然是一种常见的数据交换方式。本文档主要介绍如何使用 Java 实现与 FTP 服务器的交互功能,具体包括上传...

    java实现ftp自动上传文件

    Java 实现 FTP 自动上传文件是一项常见的任务,尤其在自动化部署、数据同步或者日志传输等场景中。本文将深入探讨如何使用Java编程语言来构建一个FTP文件上传系统,同时结合Log4j日志框架和命令行信息的处理。 首先...

    java写的ftp下载上传定时监控

    Java作为多平台支持的编程语言,提供了丰富的库和工具来实现FTP功能,包括下载、上传文件以及定时监控等操作。本篇文章将深入探讨如何使用Java进行FTP文件传输,并涉及自动解压和压缩的功能。 首先,让我们关注Java...

    Java 基于Swing的FTP上传下载程序

    Java基于Swing的FTP上传下载程序是一个用户界面友好、功能完备的应用,主要用于通过FTP(File Transfer Protocol)协议实现文件的上传和下载。Swing是Java提供的一个轻量级的GUI库,它允许开发者创建出美观且功能...

    java实现文件上传到ftp

    本教程将详细介绍如何使用Java实现文件上传到FTP服务器,这适用于初学者熟悉FTP客户端编程的基础概念。 首先,我们要了解FTP的基本工作原理。FTP允许客户端连接到服务器,发送文件,接收文件,或者列出服务器上的...

    Java实现ftp上传

    本文将详细介绍如何使用Java实现FTP上传功能,并探讨相关知识点。 首先,要进行FTP操作,我们需要一个Java FTP客户端库。Java标准库并不直接支持FTP,但提供了`java.net.Socket`类,可以通过它构建低级别的FTP连接...

    java ftp上传 下载 文件压缩解压

    首先,FTP上传和下载是Java中常见的任务,通常通过`java.net.Socket`或`java.net.URL`类来实现,但更常见的是使用`org.apache.commons.net.ftp`库,这个库提供了FTPClient类,简化了FTP操作。例如,你可以创建一个...

    (转)Java使用Apache FtpServer实现嵌入式FTP服务器

    Java使用Apache FtpServer实现嵌入式FTP服务器是一项常见的任务,尤其在开发集成测试或部署自动化流程时。Apache FtpServer是一个开源项目,它提供了一个轻量级且可嵌入的FTP服务器,允许开发者在Java应用程序中直接...

Global site tag (gtag.js) - Google Analytics