连接ftp服务器 JDK 1.7

连接ftp服务器 JDK 1.7

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import org.apache.log4j.Logger;

import com.zhiwei.core.util.AppUtil;

import java.net.InetSocketAddress;

import java.net.SocketAddress; 

import sun.net.TelnetInputStream;

import sun.net.TelnetOutputStream;

import sun.net.ftp.FtpClient;

import sun.net.ftp.FtpProtocolException;

public class  FtpUtils {

         protected static Logger LOG=Logger.getLogger(FtpUtils.class);

         private  FtpClient ftpClient=null;

        

         /**

     * 连接ftp服务器 JDK 1.7

     * 

     * @param url

     * @param port

     * @param username

     * @param password

     * @return FtpClient

     * @throws FtpProtocolException

     * @throws IOException

     */ 

    public  FtpClient connect(String url, int port, String username, 

            String password) { // 创建ftp 

        try { 

            // 创建地址 

            SocketAddress addr = new InetSocketAddress(url, port); 

            // 连接 

            ftpClient = FtpClient.create();

            ftpClient.setConnectTimeout(6000000);

            ftpClient.connect(addr); 

            // 登陆 

            ftpClient.login(username, password.toCharArray()); 

            ftpClient.setBinaryType();

           

            System.out.println(“——————————ftp服务器已连接———————-“); 

        } catch (FtpProtocolException e) { 

                 LOG.error(“ftp连接服务器出错,出错原因\r\n”, e);

        } catch (IOException e) { 

                 LOG.error(“ftp连接服务器出错,出错原因”, e);

        } 

        return ftpClient; 

    } 

        

    /**

     * 切换目录

     * 

     * @param ftp

     * @param path

     */ 

    public  void cd(String path) { 

        try { 

                 ftpClient.changeDirectory(path);

                 LOG.info(“切换目录”+ftpClient.getWorkingDirectory());

           // System.out.println(ftpClient.getWorkingDirectory()); 

        } catch (FtpProtocolException e) { 

                 LOG.error(“切换目录出错”,e);

        } catch (IOException e) { 

                 LOG.error(“切换目录出错”,e);

        } 

    } 

        

    //上传创建的文件夹或文件

    public void uploadDirectory(String directory,boolean bl,String nameFtp,String n,String serverIp,String username,String password)throws IOException, FtpProtocolException{

             if (ftpClient==null) {

                       Integer ss = Integer.valueOf(n);

                 connect(serverIp, ss,username , password);

             }

             File file=new File(directory);

                    String name=null;//待上传文件名

                    boolean result;

                    if(file.isDirectory()){ 

                             String dir = file.getName();

                                      if(bl){

                                                dir = nameFtp;

                                                bl = false;

                                      }

                                      result=isDirExist(ftpClient,dir);

                                      if (!result) {

                                                LOG.error(dir+”———-该文件夹已存在”); 

                                     }          

                             try {

                                     ftpClient.changeDirectory(dir);

                                     ftpClient.setBinaryType();

                            } catch (FtpProtocolException e) {

                                     LOG.error(“——进入”+dir+”文件夹失败——–“,e);

                            }   

                              String[] files = file.list();          

                               for (int i = 0; i < files.length; i++) {   

                                     File tmpFile = new File(file.getPath()+”\\”+files[i] );

                                      if(tmpFile.isDirectory()){

                                                 uploadDirectory(tmpFile.getAbsolutePath(),bl,nameFtp, n, serverIp, username, password);

                                       }else{

                                              name=tmpFile.getName();

                                         upload(directory+”/”+name, n, serverIp, username, password);     

                                        }              

                                }

                               ftpClient.changeToParentDirectory();

                             }else{   //文件上传

                                      upload(directory,file.getName(), n, serverIp, username, password);

                             }

          }

         //文件上传

    public void upload(String srcFile,String n,String serverIp,String username,String password)throws IOException{

                  

         File file=new File(srcFile);

         FileInputStream fin=new FileInputStream(srcFile);

         

        TelnetOutputStream tos = null;

         try {

                   tos = (TelnetOutputStream) ftpClient.putFileStream(file.getName(), true);

                   if(file.getName().equals(“spring.xml”)){

                            InputStreamReader ie=new InputStreamReader(fin, “utf-8”);

                            BufferedReader reader = new BufferedReader(ie);

                            String line = null;

                            while ((line = reader.readLine()) != null) {

                                     if(line.indexOf(“serverIp”)!=-1){

                                               line=line.replaceAll(“serverIp”, serverIp);

                                               line=line.replaceAll(“dataName”, n);

                                     }

                                     if(line.indexOf(“datausername”)!=-1){

                                               line=line.replaceAll(“datausername”, username);

                                     }

                                     if(line.indexOf(“datapassword”)!=-1){

                                               line=line.replaceAll(“datapassword”, password);

                                     }

                                     tos.write(line.getBytes(“utf-8”));

                            }

                            reader.close();

                            ie.close();

                   }else{

                            int readLength = 0;

                            byte[] buf = new byte[1024];

                            while ( (readLength = fin.read(buf)) != -1) {

                                     tos.write(buf, 0, readLength);

                            }

                   }

                   fin.close();

                   tos.close();

         } catch (Exception e) {

                   //System.out.println(“——–获取远程文件输出流失败—“);

                   LOG.error(“——–获取远程文件输出流失败—“,e );

         }

    }

    public void upload(String srcFile,String destFile,String n,String serverIp,String username,String password)throws IOException{

         upload(srcFile, n, serverIp, username, password);

         File file=new File(srcFile);

         //文件重命名 打开 上传 zip文件会报错 先关闭

        // ftpClient.rename(file.getName(), destFile);

        }

    public void close(){

         try {

          ftpClient.close();

         } catch (IOException e) {

          LOG.error(“关闭输出流失败”,e);

         }

        }

    /**

     * @param directory  上传文件在服务器上的存放路径

     * @param srcFilePath  要上传文件的存放路径

          * svn:songwj

          * 创建文件夹、调用上传方法进行上传

     * @throws FtpProtocolException

          */

          public void swjUploadDirectory(String directory,String srcFilePath,boolean bl,String nameFtp,String n,String serverIp,String username,String password,String dirStr)throws IOException, FtpProtocolException{

        

                    System.out.println(“服务器上要创建文件夹路径————-“+dirStr);

                    boolean result;

                    //1 创建各个节点的文件夹

                     if(!””.equals(dirStr)){

                              String dir =dirStr;

                              String url[] = dir.split(“/”);

                              for(int i = 0;i<url.length;i++){

                                       try {

                                               result=isDirExist(ftpClient,url[i]);

                                               if (result) {

                                                        LOG.info(“创建”+url[i]+”成功”);

                                               }else {

                                                        LOG.info(url[i]+”已存在”);

                                               }

                                               ftpClient.changeDirectory(url[i]);

                                               ftpClient.setBinaryType();

                                     } catch (FtpProtocolException e) {

                                               LOG.error(“——创建文件夹失败—–“, e);

                                     }

                              }

                     }

                     //2 调用上传方法上传文件

                     swjUpload(srcFilePath,directory, n, serverIp, username, password);

          }

          

          /** 判断Ftp目录是否存在

          * @throws FtpProtocolException */

          public boolean isDirExist(FtpClient ftpClient, String dir) {

          try{

                    ftpClient.makeDirectory(dir);

          } catch (FtpProtocolException  e1){

                    return false;

          }catch (IOException e) {

                    return false;

         }

          return true;

          }

          

          /**

           * 文件上传代码

           * @param srcFile  要上传文件的路径

           * @param fileToServerPath  上传文件存放在服务器上的位置

           * @param n

           * @param serverIp

           * @param username

           * @param password

           * @throws IOException

           */

          public void swjUpload(String srcFile,String fileToServerPath,String n,String serverIp,String username,String password)throws IOException{

                  

           //创建一个文件(服务器上对应的文件)

      File serverFile = new File(fileToServerPath);

     

      //创建选择要上传的文件对象

           File srFile=new File(srcFile);

          

           //把上传的文件对象放入文件流中

           FileInputStream fin=new FileInputStream(srcFile);

           LOG.info(“上传到服务器地址===”+fileToServerPath);

           //System.out.println(“fileToServerPath===”+fileToServerPath);

           //打开ftp上的文件 准备接收

           TelnetOutputStream tos = null;

         try {

                   tos = (TelnetOutputStream) ftpClient.putFileStream(serverFile.getName(), true);

                   if(srFile.getName().equals(“spring.xml”)){

                        InputStreamReader ie=new InputStreamReader(fin, “utf-8”);

                        BufferedReader reader = new BufferedReader(ie);//读取要上传的 文件

                        String line = null;

                        while ((line = reader.readLine()) != null) {

                                 if(line.indexOf(“serverIp”)!=-1){

                                           line=line.replaceAll(“serverIp”, serverIp);

                                           line=line.replaceAll(“dataName”, n);

                                 }

                                 if(line.indexOf(“datausername”)!=-1){

                                           line=line.replaceAll(“datausername”, username);

                                 }

                                 if(line.indexOf(“datapassword”)!=-1){

                                           line=line.replaceAll(“datapassword”, password);

                                 }

                                 tos.write(line.getBytes(“utf-8”));

                      }

                      reader.close();

                      ie.close();

                     }else{

                      int readLength = 0;

                      byte[] buf = new byte[1024];

                      while ( (readLength = fin.read(buf)) != -1) {

                          tos.write(buf, 0, readLength);//把要上传文件流写入服务器的文件中

                      }

                     }

                    tos.close();

         } catch (Exception e) {

                   LOG.error(“上传文件到服务器失败”, e);

         }

          fin.close();

          }

          

          /**

           * Ftp 服务器文件下载单个文件

           * svn:songwj

           * @param srcStr  要下载文件的路径

           * @param disStr  下载文件存放的路径

           */

          public  void  ftpDownFile(String srcStr,String disStr) {

                    

                   // 读取配置文件读取ftp ip地址 端口号  账户  密码

                            String ip = AppUtil.getFtpIp();

                            String us = AppUtil.getFtpUsName();//帐号

                            String ps = AppUtil.getFtpPss();//密码

                            int port = Integer.valueOf(AppUtil.getFtpPort());//端口 默认为 21

                            connect(ip, port, us, ps);

                   TelnetInputStream is = null;

        FileOutputStream os = null;

       

        System.out.println(“srcStr——————–“+srcStr);

        System.out.println(“disStr——————–“+disStr);

       

       

        try {

            //获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

            ftpClient.changeDirectory(srcStr);

            is = (TelnetInputStream) ftpClient.getFileStream(srcStr);

         

            System.out.println(“os——————–“+os.toString());

 

            byte[] bytes = new byte[2048];

            int c;

            while ((c = is.read(bytes)) != -1) {

                os.write(bytes, 0, c);

            }

            System.out.println(“—————-下载成功—————-“);

        } catch (IOException ex) {

            //System.out.println(“下载失败”);

            LOG.error(“—————下载失败————–“, ex);

            throw new RuntimeException(ex);

        } catch (FtpProtocolException e) {

                 LOG.error(“—————-下载失败—————-“, e);

                   } finally{

            try {

                if(is != null){

                    is.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            } finally {

                try {

                    if(os != null){

                        os.close();

                    }

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

          }

          /**

           * 删除ftp服务器上指定的文件

           * @param fileName

           */

          public String  removeFile(String deleteFilePath){

                    

                    System.out.println(“———进入到删除方法中”);

                    String resultStr = “”;

                    

                    if(ftpClient!= null){

                              try {

                                      

                                       ftpClient.deleteFile(deleteFilePath);

                                     //ftpClient.deleteFile(“D:/sendMessagePicture.png”);

                                     //ftpClient.deleteFile( “D:\\sendMessagePicture.png”);

                                     resultStr = ftpClient.getLastResponseString();

                                     //FtpReplyCode lastReplyCode = ftpClient.getLastReplyCode();

                                     System.out.println(“status—————-“+resultStr);

                            } catch (Exception e) {

                                     LOG.error(“删除失败”, e);

                            }

                    }else{

                             resultStr = “FAIL”;

                    }

                   return resultStr;

          }

         }

转载于:https://www.cnblogs.com/chinaifae/p/10401481.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101113.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用网络工具

    常用网络工具这里是计算机网络的一些相关工具的用途和使用方法,很简洁。

    2022年6月20日
    27
  • hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware

    hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware下载一个ISO格式的XP系统镜像,把ISO文件设置为虚拟机的光驱,启动虚拟机,会自动从ISO镜像文件启动,创建虚拟机,创建虚拟磁盘VHD,然后加入启动项。打开本系统的磁盘管理,对虚拟磁盘进行格式化,并设置为活动分区(有一个就行)然后启动虚拟机,给虚拟机安装系统,就可以了。我是启动虚拟机后进入PE,然后选择Ghost32装的。如果启动虚拟机鼠标不能动,就点“

    2022年8月16日
    4
  • 数据库设计规范

    数据库设计规范数据库的重要性不言而喻。对程序员来说跟数据库打交道更是家常便饭。数据库给开发带来了巨大的便利。我们或多或少的知道一些数据库设计规范,但并不全面。今天我就简单整理一下,帮自己做个总结梳理,也希望可以帮到小伙伴们。数据库设计规范包括命名规范、库表基础规范、字段规范、索引规范和SQL设计规范。1.命名规范1.1库名、表名、字段名禁止使用MySQL保留字。1.2库名、表名、字段名使…

    2022年7月12日
    24
  • 安卓ExpandableListView的详细使用教程(附代码解析过程)

    安卓ExpandableListView的详细使用教程(附代码解析过程)ExpandableListView又称可扩展的ListView,它可以实现点击父项展开子项的效果,本文实现了一个比较精美的ExpandableListView。

    2022年6月30日
    20
  • Android 浏览器打开APP中的Activity

    Android 浏览器打开APP中的Activity具体实现方式请看博客:jiangwei0910410003上面的示例打开了MainActivity,如果要打开很多不同的Activity,就这样干:

    2022年5月14日
    44
  • python 多线程测试_【Python】多线程网站死链检测工具

    python 多线程测试_【Python】多线程网站死链检测工具最新作品,一个python写的多线程爬虫+链接检测,其实可以分开用。实测系统:30个线程(10个爬虫,20个检测)深度3MacOS64bit√CentOS64bit√Fedora1732bit√Windows764bit√思路:通过线程管理器,触发爬虫线程按照广度优先爬取链接,另一方面触发检测线程用来检测爬取的链接。爬过的链接如果正常不用再检测,否则需要再检测。第一天,大致设计,…

    2022年7月23日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号