你的位置:首页 > Java教程

[Java教程]java ftp


apache ftp

1. ftp javabean(base properties)

package com.cdv.apolloagent.ftp;/** * ftp链接常量 * */public class Ftp {  private String ipAddr;//ip地址    private Integer port;//端口号    private String userName;//用户名    private String pwd;//密码    private String path;//remote relative路径  public String getIpAddr() {    return ipAddr;  }  public void setIpAddr(String ipAddr) {    this.ipAddr = ipAddr;  }  public Integer getPort() {    return port;  }  public void setPort(Integer port) {    this.port = port;  }  public String getUserName() {    return userName;  }  public void setUserName(String userName) {    this.userName = userName;  }  public String getPwd() {    return pwd;  }  public void setPwd(String pwd) {    this.pwd = pwd;  }  public String getPath() {    return path;  }  public void setPath(String path) {    this.path = path;  }    }

2. ftp upload&download util

package com.cdv.apolloagent.ftp;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import org.apache.log4j.Logger;public class FtpUtil {    private static Logger logger=Logger.getLogger(FtpUtil.class);    private static FTPClient ftp;    /**   * 获取ftp连接   * @param f   * @return   * @throws Exception   */  public static boolean connectFtp(Ftp f) throws Exception{    ftp=new FTPClient();    boolean flag=false;    int reply;    if (f.getPort()==null) {      ftp.connect(f.getIpAddr(),21);    }else{      ftp.connect(f.getIpAddr(),f.getPort());    }    ftp.login(f.getUserName(), f.getPwd());    ftp.setFileType(FTPClient.BINARY_FILE_TYPE);    reply = ftp.getReplyCode();       if (!FTPReply.isPositiveCompletion(reply)) {          ftp.disconnect();          return flag;       }       ftp.changeWorkingDirectory(f.getPath());       flag = true;       return flag;  }    /**   * 关闭ftp连接   */  public static void closeFtp(){    if (ftp!=null && ftp.isConnected()) {      try {        ftp.logout();        ftp.disconnect();      } catch (IOException e) {        e.printStackTrace();      }    }  }    /**   * ftp上传文件   * @param f   * @throws Exception   */  public static void upload(String remotePath, File f) throws Exception{    if (f.isDirectory()) {//file是目录      ftp.makeDirectory(f.getName());      ftp.changeWorkingDirectory(f.getName());      String[] files=f.list();      for(String fstr : files){        File file1=new File(f.getPath()+"/"+fstr);        if (file1.isDirectory()) {          ftp.changeToParentDirectory();          upload(remotePath+"/"+f.getName(),file1);        }else{          File file2=new File(f.getPath()+"/"+fstr);          FileInputStream input=new FileInputStream(file2);          ftp.storeFile(file2.getName(),input);          input.close();        }      }    }else{      File file2=new File(f.getPath());      FileInputStream input=new FileInputStream(file2);      ftp.changeWorkingDirectory(remotePath);      ftp.storeFile(file2.getName(),input);      input.close();    }  }    /**   * 下载链接配置   * @param f   * @param localBaseDir 本地目录   * @param remoteBaseDir 远程目录   * @throws Exception   */  public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir, String fileName ) throws Exception{    if (FtpUtil.connectFtp(f)) {            try {         FTPFile[] files = null;         boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir);         if (changedir) {           ftp.setControlEncoding("GBK");           files = ftp.listFiles();           for (int i = 0; i < files.length; i++) {             if(files[i].getName().equals(fileName)){              try{                   downloadFile(files[i], localBaseDir, remoteBaseDir);               }catch(Exception e){                 logger.error(e);                 logger.error("<"+files[i].getName()+">下载失败");               }            }           }         }       } catch (Exception e) {         logger.error(e);         logger.error("下载过程中出现异常");       }     }else{      logger.error("链接失败!");    }      }      /**   *   * 下载FTP文件   * 当你需要下载FTP文件的时候,调用此方法   * 根据<b>获取的文件名,本地地址,远程地址</b>进行下载   *   * @param ftpFile   * @param relativeLocalPath   * @param relativeRemotePath   */   private static void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) {     if (ftpFile.isFile()) {      if (ftpFile.getName().indexOf("?") == -1) {         OutputStream outputStream = null;         try {           File locaFile= new File(relativeLocalPath+ ftpFile.getName());           //判断文件是否存在,存在则返回           if(locaFile.exists()){             return;           }else{             outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName());             ftp.retrieveFile(ftpFile.getName(), outputStream);             outputStream.flush();             outputStream.close();           }         } catch (Exception e) {           logger.error(e);        } finally {           try {             if (outputStream != null){               outputStream.close();             }          } catch (IOException e) {            logger.error("输出文件流异常");           }         }       }     } else {       String newlocalRelatePath = relativeLocalPath + ftpFile.getName();       String newRemote = new String(relativeRemotePath+ ftpFile.getName().toString());       File fl = new File(newlocalRelatePath);       if (!fl.exists()) {         fl.mkdirs();       }       try {         newlocalRelatePath = newlocalRelatePath + '/';         newRemote = newRemote + "/";         String currentWorkDir = ftpFile.getName().toString();         boolean changedir = ftp.changeWorkingDirectory(currentWorkDir);         if (changedir) {           FTPFile[] files = null;           files = ftp.listFiles();           for (int i = 0; i < files.length; i++) {             downloadFile(files[i], newlocalRelatePath, newRemote);           }         }         if (changedir){          ftp.changeToParentDirectory();         }       } catch (Exception e) {         logger.error(e);      }     }   }   /**   * 上传指定文件名的文件到ftp   * @param filePath   * @return   * @throws Exception   */  public static boolean uploadFileToFTP(String remotePath, String filePath) {    Boolean result = false;    Ftp f = getFtpInstance();    try {      FtpUtil.connectFtp(f);    } catch (Exception e1) {      e1.printStackTrace();      logger.error(e1);      logger.error("上传过程,ftp连接出现异常");      return result;    }    File file = new File(filePath);     try {      //把文件上传在ftp上      FtpUtil.upload(remotePath,file);      result = true;     } catch (Exception e) {      // TODO: handle exception    }    closeFtp();    return result;  }    public static Ftp getFtpInstance(){    Ftp f=new Ftp();    f.setIpAddr("10.7.4.6");    f.setUserName("mam");    f.setPwd("123456");    return f;  }    public static boolean downloadFileFromFTP(String relativeLocalPath, String relativeRemotePath, String fileName){    Ftp f = getFtpInstance();    Boolean result = false;    try {      FtpUtil.startDown(f, relativeLocalPath, relativeRemotePath, fileName);      result = true;    } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();      logger.error(e);      logger.error("下载文件过程出现错误");    }    return result;  }    public static void main(String[] args) throws Exception{       Ftp f=new Ftp();      f.setIpAddr("10.7.4.6");      f.setUserName("mam");      f.setPwd("123456");//      FtpUtil.connectFtp(f);//      File file = new File("D:/temp/ftp_01.txt"); //      FtpUtil.upload(file);//把文件上传在ftp上      FtpUtil.startDown(f, "D:/", "/test", "ftp.txt");//下载ftp文件测试      System.out.println("ok");         }   }