004iiauwz5 发表于 2016-6-8 06:47:07

ftp方式上传、下载文件

  //附件是需要的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.getName().equals(str)) {// 判断是否有该文件夹,如果有返回false;
      System.out.println(files.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.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]
查看完整版本: ftp方式上传、下载文件