zoukankan      html  css  js  c++  java
  • FTPClient用法

     

    某些数据交换,我们需要通过ftp来完成。

    sun.net.ftp.FtpClient 可以帮助我们进行一些简单的ftp客户端功能:下载、上传文件。

    但如遇到创建目录之类的就无能为力了,我们只好利用第三方源码,比如 com.enterprisedt.net.ftp.FTPClient

    下面写一些sun.net.ftp.FtpClient 的使用方法。

    1、引入包

    import java.io.DataInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import sun.net.*;
    import sun.net.ftp.FtpClient;

    2、我们建一个叫做FtpUtil的class

       /**
         * connectServer
         * 连接ftp服务器
         * @throws java.io.IOException
         * @param path 文件夹,空代表根目录
         * @param password 密码
         * @param user    登陆用户
         * @param server 服务器地址
         */
      public void connectServer(String server, String user, String password,  String path)
      throws IOException  
       {
         // server:FTP服务器的IP地址;user:登录FTP服务器的用户名
         // password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径
          ftpClient = new FtpClient();
          ftpClient.openServer(server);
          ftpClient.login(user, password);
         //path是ftp服务下主目录的子目录
         if (path.length() != 0)   ftpClient.cd(path);
         //用2进制上传、下载
          ftpClient.binary();      
    }
      
    /**
         * upload
         * 上传文件
         * @throws java.lang.Exception
         * @return -1 文件不存在
         *           -2 文件内容为空  
         *           >0 成功上传,返回文件的大小
         * @param newname 上传后的新文件名
         * @param filename 上传的文件
         */
    public long upload(String filename,String newname) throws Exception  
    {
         long result = 0;
          TelnetOutputStream os = null;
          FileInputStream is = null;
         try {          
              java.io.File file_in = new java.io.File(filename);
             if (!file_in.exists()) return -1;
             if (file_in.length()==0) return -2;
              os = ftpClient.put(newname);
              result = file_in.length();
              is = new FileInputStream(file_in);
             byte[] bytes = new byte[1024];
             int c;
             while ((c = is.read(bytes)) != -1) {
                   os.write(bytes, 0, c);
              }
          } finally {
             if (is != null) {
                  is.close();
              }
             if (os != null) {
                 os.close();
              }
          }
        return result;
    }
    /**
         * upload
         * @throws java.lang.Exception
         * @return  
         * @param filename
         */
    public long upload(String filename)
    throws Exception  
    {
        String newname = "";
        if (filename.indexOf("/")>-1)
         {
            newname = filename.substring(filename.lastIndexOf("/")+1);
         }else
         {
            newname = filename;
         }
        return upload(filename,newname);
    }
      
    /**
         *   download
         *   从ftp下载文件到本地
         * @throws java.lang.Exception
         * @return  
         * @param newfilename 本地生成的文件名
         * @param filename 服务器上的文件名
         */
    public long download(String filename,String newfilename)  
    throws Exception
    {   
        long result = 0;
         TelnetInputStream is = null;
         FileOutputStream os = null;
        try  
         {
            is = ftpClient.get(filename);        
            java.io.File outfile = new java.io.File(newfilename);
            os = new FileOutputStream(outfile);
           byte[] bytes = new byte[1024];
           int c;
           while ((c = is.read(bytes)) != -1) {
                os.write(bytes, 0, c);
                result = result + c;
            }
         } catch (IOException e)  
         {
            e.printStackTrace();
         }
        finally {
             if (is != null) {
                  is.close();
              }
             if (os != null) {
                 os.close();
              }
          }
         return result;
    }
    /**
       * 取得某个目录下的所有文件列表
       *
       */
    public List getFileList(String path)
    {
         List list = new ArrayList();
        try  
         {
            DataInputStream dis = new   DataInputStream(ftpClient.nameList(path));
           String filename = "";
           while((filename=dis.readLine())!=null)   
            {   
              list.add(filename);         
            }   
        
         } catch (Exception e)  
         {
            e.printStackTrace();
         }
        return list;
    }
      
    /**
         * closeServer
         * 断开与ftp服务器的链接
         * @throws java.io.IOException
         */
    public void closeServer()
    throws IOException  
    {    
       try  
        {
          if (ftpClient != null)  
           {
             ftpClient.closeServer();      
           }
        } catch (IOException e) {
           e.printStackTrace();
        }
    }
       
      public static void main(String [] args) throws Exception  
       {
         FtpUtil ftp = new FtpUtil();
        try {
             //连接ftp服务器
              ftp.connectServer("10.163.7.15", "cxl", "1", "info2");
             /**   上传文件到 info2 文件夹下 */
              System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字节");
             /** 取得info2文件夹下的所有文件列表,并下载到 E盘下 */
              List list = ftp.getFileList(".");
             for (int i=0;i<list.size();i++)
              {
                String filename = (String)list.get(i);
                 System.out.println(filename);
                 ftp.download(filename,"E:/"+filename);
              }
         } catch (Exception e) {
           ///
         }finally
         {
            ftp.closeServer();
         }
       }   
    }
  • 相关阅读:
    对于函数中多个返回值的处理
    Docker-compose 安裝单机版redis
    设计模式七大设计原则
    UML 设计技巧
    使用Docker 容器配置nexus3.29 私有仓库
    分布式消息Kafka通信原理分析
    分布式消息Kafka通信
    使用docker 搭建nexus3.29
    分布式消息Kafka初步认识及基本应用
    Dubbo 常用配置及源码分析
  • 原文地址:https://www.cnblogs.com/hhcblog/p/3963398.html
Copyright © 2011-2022 走看看