设为首页 收藏本站
查看: 1131|回复: 0

[经验分享] ftp方式上传、下载文件

[复制链接]

尚未签到

发表于 2016-6-8 06:47:07 | 显示全部楼层 |阅读模式
  //附件是需要的jar包
  
  package com.cbf.util.ftp;
  
  import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
  import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
  /**
 * org.apache.commons.net.ftp.FTPClient;
 * @return FTPClient
 * @author ryan
 * @since Oct 14, 2009
 *
 */
public class FtpOperation {
  private String ftpIP = "10.1.0.9";
  private String loginName = "jishu";
  private String password = "123456";
  // String remoteDir = "/cc";
 private String ftpPort = "21";
  private FTPClient ftp = new FTPClient();
  private Map<String, String> map = new HashMap<String, String>();
  /**
  *
  * @param ftpIP      FTP服务器ip
  * @param ftpPort    FTP服务器端口
  * @param loginName  FTP服务器登录名
  * @param password   FTP服务器登录密码
  */
 public FtpOperation(String ftpIP, String ftpPort, String loginName,
   String password) {
  this.ftpIP = ftpIP;
  this.ftpPort = ftpPort;
  this.loginName = loginName;
  this.password = password;
  getFtpConnection();
 }
  /**
  *
  * @return FTPClient
  */
 public FTPClient getFtpConnection() {
  try {
   // connection
   ftp.connect(ftpIP, Integer.parseInt(ftpPort));
   int reply = ftp.getReplyCode();
   if (FTPReply.isPositiveCompletion(reply)) {
    // login
    if (ftp.login(loginName, password)) {
     ftp.setControlEncoding("GBK");
     ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
     return ftp;
    } else {
     map.put("msg", "用户名或密码错误");
     ftp.logout();
    }
   } else {
    map.put("msg", "ip或端口错误");
    ftp.disconnect();
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   if (ftp.isConnected()) {
    try {
     ftp.disconnect();
    } catch (IOException f) {
     // TODO Auto-generated catch block
     f.printStackTrace();
    }
   }
  }
  return null;
 }
  public void closeFtpConnection() {
  if (ftp.isConnected()) {
   try {
    ftp.disconnect();
   } catch (IOException f) {
   }
  }
 }
  /**
  *
  * @param localFilePath
  *            本地文件的绝对路径
  * @param serverFilePath
  *            上传到ftp上的相对路径相 相对于ftp默认路径 如:"/aa/bb/cc/11.xml"
  * @return String
  */
 public boolean uploadFile(String localFilePath, String serverFilePath) {
  InputStream input = null;
  try {
   input = new FileInputStream(localFilePath);
  if (input == null) {
    map.put("msg", "本地文件不存在");
   }
  int n = serverFilePath.lastIndexOf("/") + 1;
   String[] str = serverFilePath.substring(0, n).split("/");// 取文件夹路径
   ftp.setControlEncoding("GBK");
   for (int i = 1; i < str.length; i++) {
    FTPFile[] files = ftp.listFiles();// 取ftp当前目录下的文件
    boolean inMark = true;
    for (int j = 1; j < files.length; j++) {
     if (files[j].getName().equals(str)) {// 判断是否有该文件夹,如果有返回false;
      System.out.println(files[j].getName() + "==" + str);
      inMark = false;
     }
    }
    if (inMark) {
     System.out.println("建包" + str);
     ftp.makeDirectory(new String(str.getBytes("GBK"),
       "iso-8859-1"));
    }
    System.out.println("进入" + str);
    boolean b = ftp.changeWorkingDirectory(new String(str
      .getBytes("GBK"), "iso-8859-1"));
   }
   return ftp.storeFile(serverFilePath.substring(n, serverFilePath
     .length()), input);// 上传文件
  } catch (FileNotFoundException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
   map.put("msg", "本地文件不存在");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   map.put("msg", "异常");
  } finally {
   try {
    input.close();
    ftp.logout();
    if (ftp.isConnected()) {
     try {
      ftp.disconnect();
     } catch (IOException f) {
     }
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return false;
 }
  /**
  * downloadType
  *
  * @param downloadType
  *            为0是下载单个文件;downloadType1时为下载文件夹下的文件
  * @param localFilePath
  *            下载到本地的绝对路径
  * @param serverFilePath
  *            ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
  * @return
  */
 public boolean downloadFile(int downloadType, String localFilePath,
   String serverFilePath) {
  boolean reMark = true;
  OutputStream outStream = null;
  try {
   String localFileEncoding = new String(
     localFilePath.getBytes("GBK"), "iso-8859-1");
  String serverPathEncoding = new String(serverFilePath
     .getBytes("GBK"), "iso-8859-1");
  if (downloadType == 0) {// 下载单个文件
    FTPFile[] files = ftp.listFiles(serverPathEncoding);
    if (files.length != 1) {
     map.put("msg", "没有" + serverPathEncoding + "这个文件");
     return false;
    }
    outStream = new FileOutputStream(localFileEncoding
      + files[0].getName());
    reMark = ftp.retrieveFile(serverPathEncoding, outStream);
  } else if (downloadType == 1) {// 下载文件夹下的所有文件,不包含文件夹
    String[] s = serverFilePath.split("/");
  for (int i = 1; i < s.length; i++) {
     ftp.changeWorkingDirectory(s);
    }
  String[] files2 = ftp.listNames(serverPathEncoding);
  if (files2 == null) {
     map.put("msg", serverPathEncoding + "没有这个路径下没有文件");
     return false;
    }
    for (int i = 0; i < files2.length; i++) {
     File f = new File(localFilePath + "/" + files2);
     outStream = new FileOutputStream(f);
     String name = new String(files2.getBytes("GBK"),
       "iso-8859-1");
     // 任意文件下载失败则返回失败
     if (!ftp.retrieveFile(serverPathEncoding + "/" + name,
       outStream)) {
      map.put("msg" + i, name + "---下载失败!");
      reMark = false;
     }
    }
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   map.put("msg", "异常");
   reMark = false;
  } finally {
   try {
    outStream.close();
    ftp.logout();
    if (ftp.isConnected()) {
     try {
      ftp.disconnect();
     } catch (IOException f) {
      reMark = false;
     }
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    reMark = false;
   }
  }
  return reMark;
 }
  /**
  * 取某路径下的文件,不包含子文件夹里的文件
  * @param path
  *            ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
  */
 public ArrayList<String> getFileList(String path) {
  ArrayList<String> list = new ArrayList<String>();
  try {
   String serverPathEncoding = new String(path.getBytes("GBK"),
     "iso-8859-1");
   //String[] files = ftp.listNames(serverPathEncoding);//文件个数
   FTPFile[] files = ftp.listFiles(serverPathEncoding);//所有东西
   if (files == null) {
    map.put("msg", path+"这个路径下是空的");
   } else {
    for (FTPFile ss : files) {
     //System.out.println(ss.getName());
     list.add(ss.getName());
    }
   }
  } catch (Exception e) {
   map.put("msg", "异常");
  }
  return list;
 }
  public static void main(String args[]) throws Exception {
  FtpOperation ftpup = new FtpOperation("10.1.0.9", "21", "jishu",
    "123456");
  // ftpup.UploadFile("f:/aa.xml", "/的是/dd/56.xml");
  // ftpup.getFtpConnection();
  // boolean b = ftpup.uploadFile("h:/eeasas说不定.txt",
  // "sd/sdsd33.pdf/11.txt");
  // boolean b = ftpup.downloadFile(0, "h:/", "的是/eeasas说不定.txt");
  // System.out.println(b);
  //ftpup.getFileList("的是/dd/");
 }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-227541-1-1.html 上篇帖子: FTP传输和下载文件 下篇帖子: unix下ftp使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表