`
hcx_2008
  • 浏览: 122240 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

FTP上传,下载

阅读更多
FTP上传,下载
来源:http://www.blogjava.net/woxingwosu/archive/2007/08/03/134311.html
     最近写了一个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
分享到:
评论
1 楼 daoyongyu 2008-12-03  
好,收藏了

相关推荐

    VB API 实现FTP上传下载源代码

    **VB API FTP上传下载源代码详解** 在信息技术领域,FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议。在VB(Visual Basic)环境中,我们可以使用API(Application Programming Interface...

    一个ftp上传下载类(MFC)

    在这个场景中,"一个ftp上传下载类(MFC)" 是一个使用MFC构建的类,它封装了FTP协议,使得开发者能够方便地在自己的应用中实现FTP的上传和下载功能。 FTP上传下载类的核心功能包括: 1. **连接与断开**:类应包含...

    C# FTP上传下载文件

    FTP上传下载文件

    VC++ FTP上传下载

    在VC++中实现FTP上传和下载功能,开发者通常会利用WinInet库或第三方FTP库。 首先,让我们深入了解一下FTP上传。FTP上传是指将本地计算机上的文件发送到FTP服务器的过程。在VC++中,可以使用WinInet API来实现这一...

    Qt4实现ftp上传下载服务器

    **Qt4实现FTP上传下载服务器** Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面和移动设备的应用程序开发。FTP(File Transfer Protocol)是互联网上用于文件传输的标准协议,允许用户从远程主机...

    VB6 FTP 上传 下载 源代码

    VB6 FTP 上传 下载 源代码,用的API,不是那种控件版本,拿来就能用. VB6 FTP 上传 下载 源代码,用的API,不是那种控件版本,拿来就能用. VB6 FTP 上传 下载 源代码,用的API,不是那种控件版本,拿来就能用.

    C#FTP上传下载

    C# FTP上传下载是开发过程中常见的一项任务,它涉及到网络通信和文件操作。在C#中,我们可以利用System.Net命名空间中的FtpWebRequest和FtpWebResponse类来实现FTP(File Transfer Protocol)的功能。下面将详细介绍...

    FTP上传下载文件demo

    在这个“FTP上传下载文件demo”项目中,开发者使用C++编程语言在Visual Studio 2010环境下创建了一个功能完备的FTP客户端应用。这个应用能够执行基本的FTP操作,包括上传文件到远程FTP服务器、从服务器下载文件以及...

    VB FTP上传下载

    ### VB FTP上传下载知识点解析 #### 一、概述 在提供的代码示例中,主要涉及了使用Visual Basic(简称VB)进行FTP(File Transfer Protocol,文件传输协议)上传与下载的功能实现。FTP是一种用于在网络上进行文件...

    qt ftp上传下载

    这篇博客文章“qt ftp上传下载”探讨了如何在Qt环境中实现FTP的上传和下载功能。我们将详细解析这个主题,了解相关知识点。 首先,要实现FTP功能,你需要使用Qt库中的QFtp模块。QFtp类提供了FTP客户端的功能,可以...

    ftp上传下载java代码

    四、FTP上传下载的进阶功能 1. 递归上传/下载目录:可以遍历本地目录,逐个上传或下载文件。 2. 断点续传:如果文件较大,可以记录已传输的部分,在下次连接时继续上传或下载。 3. 多线程上传/下载:通过多线程同时...

    FTP上传下载 C#源代码

    在本文中,我们将深入探讨FTP上传下载的C#源代码实现及其相关的知识点。 一、FTP基本概念 FTP允许用户在两台计算机之间交换文件,通常涉及一个服务器(提供文件)和一个客户端(请求文件)。它使用TCP作为传输层...

    VisualC 实效编程 99 FTP上传下载

    VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效...

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

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

    ftp上传下载图片

    "ftp上传下载图片" FTP(File Transfer Protocol,文件传输协议)是一种常用的网络协议,用于在网络上进行文件传输。FTP 协议允许用户在远程服务器上存储和检索文件。在这里,我们将讨论如何使用 C# 语言实现 FTP ...

    c# FTP上传下载demo

    本篇文章将深入探讨如何利用C#实现FTP上传和下载功能,并结合给定的"FTP上传下载demo"和"demo(upload)、FTPupload"这两个文件名,我们将具体分析其可能包含的代码示例。 首先,让我们了解FTP上传和下载的基本原理...

    ftp上传下载 linux环境下程序

    ftp上传下载 linux环境下程序 网络高级程序设计课程实验

    c++ 实现 ftp上传 下载

    下面,我们将讨论实现FTP上传和下载的关键步骤、相关库以及代码示例。 首先,为了在C++中实现FTP功能,我们需要一个库来处理网络通信和FTP协议。常用的C++ FTP库有libcurl、ftpclient、poco等。在这个例子中,我们...

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

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

Global site tag (gtag.js) - Google Analytics