Java_util_ftp_operation

本文深入解析了FTP操作类的功能和用法,包括连接、断开、目录操作、文件传输等核心功能,提供了一套完整的FTP客户端实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/**

*FTP操作类

*/

public class FTPTools {

 private String uid;

 private String pwd;

 private String hostname;

 

 private boolean binaryTransfer = true;

 private int port = 21;

 

 public FTPTools( String uid, String pwd, String hostname) {

  this.uid = uid;

  this.pwd = pwd;

  this.hostname = hostname;

 }

 public FTPTools( String uid, String pwd, String hostname, int port) {

  this.uid = uid;

  this.pwd = pwd;

  this.hostname = hostname;

  this.port = port;

 }

 

 public boolean isBinaryTransfer() {

  return binaryTransfer;

 }

 public void setBinaryTransfer(boolean binaryTransfer) {

  this.binaryTransfer = binaryTransfer;

 }

 

 public int getPort() {

  return port;

 }

 public  void setPort(int port) {

  this.port = port;

 }

 

 private FTPClient ftpClient = null;

 private SimpleDateFormat dateFormat = new SimpleDateFormat(

   "yyyy-MM-dd hh:mm");

 

 private final String[] FILE_TYPES = { "文件", "目录", "符号链接", "未知类型" };

 

 /**

  * 设置FTP客服端的配置--一般可以不设置

  * @return

  */

 private FTPClientConfig getFtpConfig() {

  FTPClientConfig ftpConfig = new FTPClientConfig(

    FTPClientConfig.SYST_UNIX);

  ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);

  return ftpConfig;

 }

 

 /**

  * 连接到服务器

  * @throws IOException

  */

 public void openConnect() {

  int reply;

  try {

   // setArg(configFile);

   ftpClient = new FTPClient();

   ftpClient.setDefaultPort(port);

   ftpClient.configure(getFtpConfig());

   ftpClient.connect(hostname);

   ftpClient.login(uid, pwd);

   ftpClient.setControlEncoding("GB18030");

   System.out.print(ftpClient.getReplyString());

   reply = ftpClient.getReplyCode();

 

   if (!FTPReply.isPositiveCompletion(reply)) {

    ftpClient.disconnect();

    // user.writeLog("【FTPTools】:FTP server refused connection.");

    System.out.println("【FTPTools】:FTP server refused connection.");

   } else {

    if (ftpClient.login(uid, pwd)) {

     // 设置为passive模式

     ftpClient.enterLocalPassiveMode();

    }

    // user.writeLog("【FTPTools】:登录ftp服务器[" + hostname+ "]成功");

    System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]成功");

    System.out.println("【FTPTools】:当前目录为"

      + ftpClient.printWorkingDirectory());

    // user.writeLog("【FTPTools】:当前目录为" +

    // ftpClient.printWorkingDirectory());

   }

  } catch (Exception e) {

   // user.writeLog("【FTPTools】:登录ftp服务器[" + hostname + "]失败");

   System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]失败");

   e.printStackTrace();

  }

 }

 

/**

   * 关闭链接 实现1

   */

  public void close()

  {

   try

   {

       if(ftpClient!=null&&ftpClient.serverIsOpen())

        ftpClient.closeServer();

   }catch(Exception e){e.printStackTrace();}

  }

 

 /**

  * 关闭连接  实现2

  */

 public void closeConnect() {

  try {

   if (ftpClient != null) {

    ftpClient.logout();

    System.out.print(ftpClient.getReplyString());

    ftpClient.disconnect();

    // user.writeLog("【FTPTools】:断开ftp服务器[" + hostname + "]成功");

    System.out.println("【FTPTools】:断开ftp服务器[" + hostname + "]成功");

   } else {

    System.out.println("【FTPTools】:已经断开ftp服务器[" + hostname + "]");

    // user.writeLog("【FTPTools】:已经断开ftp服务器[" + hostname + "]");

   }

 

  } catch (Exception e) {

   e.printStackTrace();

   // user.writeLog("【FTPTools】:断开ftp服务器[" + hostname + "]失败");

   System.out.println("【FTPTools】:断开ftp服务器[" + hostname + "]失败");

  }

 }

 

 /**

  * 进入到服务器的某个目录下

  * @param directory

  */

 public  void changeWorkingDirectory(String directory) {

  try {

 

   if (ftpClient == null) {

    openConnect();

   }

   ftpClient.changeWorkingDirectory(directory);

   System.out.print(ftpClient.getReplyString());

   System.out.println("【FTPTools】:进入目录" + directory);

   System.out.println("【FTPTools】:当前目录为"

     + ftpClient.printWorkingDirectory());

   // user.writeLog("【FTPTools】:当前目录为" +

   // ftpClient.printWorkingDirectory());

   // user.writeLog(ftpClient.getReplyString());

   // user.writeLog("【FTPTools】:进入目录" + directory);

  } catch (IOException ioe) {

   ioe.printStackTrace();

   // user.writeLog(ioe);

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 

 /**

  * 返回到上一层目录

  */

 public  void changeToParentDirectory() {

  try {

   if (ftpClient == null) {

    openConnect();

   }

   ftpClient.changeToParentDirectory();

   System.out.print(ftpClient.getReplyString());

   System.out.println("【FTPTools】:返回至上层目录");

   System.out.println("【FTPTools】:当前目录为"

     + ftpClient.printWorkingDirectory());

   // user.writeLog("【FTPTools】:当前目录为" +

   // ftpClient.printWorkingDirectory());

   // user.writeLog(ftpClient.getReplyString());

   // user.writeLog("【FTPTools】:返回至上层目录");

  } catch (IOException ioe) {

   ioe.printStackTrace();

   // user.writeLog(ioe);

  }

 }

 

 /**

  * 列出服务器上所有文件及目录

  */

 public  void listAllRemoteFiles() {

  listRemoteFiles("*");

 }

 

 /**

  * 列出服务器上文件和目录

  * @param regStr --匹配的正则表达式  

  */

 // @SuppressWarnings("unchecked")

 @SuppressWarnings(value = { "unchecked" })

 public  void listRemoteFiles(String regStr) {

  checkConnect(ftpClient);

  try {

   FTPFile[] files = ftpClient.listFiles(regStr);

   System.out.print(ftpClient.getReplyString());

   if (files == null || files.length == 0) {

    System.out.println("【FTPTools】:There has not any file!");

    // user.writeLog("【FTPTools】:There has not any file!");

   } else {

    TreeSet<FTPFile> fileTree = new TreeSet(new Comparator() {

     // 先按照文件的类型排序(倒排),然后按文件名顺序排序

     public int compare(Object objFile1, Object objFile2) {

      if (objFile1 == null) {

       return -1;

      } else if (objFile2 == null) {

       return 1;

      } else {

       FTPFile file1 = (FTPFile) objFile1;

       FTPFile file2 = (FTPFile) objFile2;

       if (file1.getType() != file2.getType()) {

        return file2.getType() - file1.getType();

       } else {

        return file1.getName().compareTo(

          file2.getName());

       }

      }

     }

    });

    for (FTPFile file : files) {

     fileTree.add(file);

    }

    System.out.printf("%-35s%-10s%15s%15s/n", "名称", "类型", "修改日期",

      "大小");

    for (FTPFile file : fileTree) {

     System.out.printf("%-35s%-10s%15s%15s/n",

       iso8859togbk(file.getName()),

       FILE_TYPES[file.getType()],

       dateFormat.format(file.getTimestamp().getTime()),

       FileUtils.byteCountToDisplaySize(file.getSize()));

    }

   }

  } catch (Exception e) {

   e.printStackTrace();

   //user.writeLog(e);

  }

 }

 

 /**

  * 设置传输文件的类型[文本文件或者二进制文件]

  * @param fileType --BINARY_FILE_TYPE、ASCII_FILE_TYPE

  */

 public  void setFileType(int fileType) {

  try {

   if (ftpClient == null) {

    openConnect();

   }

   ftpClient.setFileType(fileType);

  } catch (Exception e) {

   e.printStackTrace();

   // user.writeLog(e);

  }

 }

 

 /**

  * 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码

  * @param obj

  * @return

  */

 private  String iso8859togbk(Object obj) {

  try {

   if (obj == null) {

    return "要转换的对象为null";

   } else {

    return new String(obj.toString().getBytes("iso-8859-1"), "GBK");

   }

  } catch (Exception e) {

   return e.toString();

  }

 }

 

 /**

  * 删除文件

  */

 public  void deleteFile(String filename) {

  try {

   if (ftpClient == null) {

    openConnect();

   }

   ftpClient.deleteFile(filename);

   System.out.print(ftpClient.getReplyString());

   System.out.println("【FTPTools】:删除文件" + filename + "成功!");

   // user.writeLog(ftpClient.getReplyString());

   // user.writeLog("【FTPTools】:删除文件" + filename + "成功!");

  } catch (IOException ioe) {

   ioe.printStackTrace();

   // user.writeLog("【FTPTools】:删除文件" + filename + "失败!");

   System.out.println("【FTPTools】:删除文件" + filename + "失败!");

  }

 }

 

 /**

  * 重命名文件

  * @param oldFileName --原文件名

  * @param newFileName --新文件名

  */

 public  void renameFile(String oldFileName, String newFileName) {

  try {

   if (ftpClient == null) {

    openConnect();

   }

   ftpClient.rename(oldFileName, newFileName);

   System.out.print(ftpClient.getReplyString());

   System.out.println("【FTPTools】:将文件" + oldFileName + "重命名为"

     + newFileName);

   // user.writeLog(ftpClient.getReplyString());

   // user.writeLog("【FTPTools】:将文件" + oldFileName + "重命名为"+

   // newFileName);

  } catch (IOException ioe) {

   ioe.printStackTrace();

  }

 }

 

 /**

  * 上传文件

  * @param localFilePath --本地文件路径  

  * @param newFileName --新的文件名

  */

 public boolean uploadFile(String localFilePath, String localFileName,

   String remoteFilePath, String remoteFileName) {

  checkConnect(ftpClient);

  if (!localFilePath.endsWith("/")) {

   localFilePath += "/";

  }

  transferType(binaryTransfer);

  int reply;

 

  // 上传文件

  BufferedInputStream bis = null;

  try {

   ftpClient.changeWorkingDirectory(remoteFilePath);

   reply = ftpClient.getReplyCode();

   if (reply == 550) {

    ftpClient.makeDirectory(remoteFilePath);

    ftpClient.changeWorkingDirectory(remoteFilePath);

   }

 

   bis = new BufferedInputStream(new FileInputStream(localFilePath

     + localFileName));

   ftpClient.storeFile(remoteFileName, bis);

   System.out.println(ftpClient.getReplyString() + "【FTPTools】:上传文件" + localFilePath

     + localFileName + "成功!");

   return true;

  } catch (Exception e) {

   System.out.println("【FTPTools】:上传文件" + localFilePath

     + localFileName + "失败!");

   System.out.println(e.toString());

   return false;

  } finally {

   try {

    if (bis != null) {

     bis.close();

    }

   } catch (Exception e) {

    e.printStackTrace();

   }

  }

 }

 

 /**

  * 下载文件

  * @param remoteFileName --服务器上的文件名  

  * @param localFileName  --本地文件名

  */

 public  boolean loadFile(String remoteFilePath, String remoteFileName,

   String localFilePath, String localFileName) {

  checkConnect(ftpClient);

  if (!remoteFilePath.endsWith("/")) {

   remoteFilePath += "/";

  }

  if (!localFilePath.endsWith("/")) {

   localFilePath += "/";

  }

  transferType(binaryTransfer);

  if (localFileName == "" || localFileName == null) {

   localFileName = remoteFileName;

  }

  // 下载文件

  BufferedOutputStream bos = null;

  try {

   if (remoteFilePath != "" && remoteFilePath != null) {

    changeWorkingDirectory(remoteFilePath);

   }

   System.out.println("【FTPTools】:开始下载文件到" + localFilePath + localFileName);

   //user.writeLog(ftpClient.getReplyString());

   if (isExist(remoteFileName)) {

    bos = new BufferedOutputStream(new FileOutputStream(

      localFilePath + localFileName));

    ftpClient.retrieveFile(remoteFileName, bos);

    System.out.print(ftpClient.getReplyString());

    System.out.println("【FTPTools】:下载文件" + remoteFilePath

      + remoteFileName + "成功!");

    return true;

   } else {

    System.out.println("【FTPTools】:文件" + remoteFilePath

      + remoteFileName + "不存在!");

    System.out.println("【FTPTools】:下载文件" + remoteFilePath

      + remoteFileName + "失败!");

    return false;

   }

  } catch (Exception e) {

   System.out.println(ftpClient.getReplyString() +"【FTPTools】:下载文件" + remoteFilePath

     + remoteFileName + "失败!");

   System.out.println(String.valueOf(e));

   return false;

  } finally {

   try {

    if (bos != null)

     bos.close();

   } catch (Exception e) {

    e.printStackTrace();

   }

  }

 }

 

 /**

  * 设置文件传输类型

  * @param binaryTransfer

  * @throws IOException

  */

 public  void transferType(boolean binaryTransfer) {

  try {

   if (binaryTransfer) {

    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

   } else {

    ftpClient.setFileType(FTPClient.ASCII_FILE_TYPE);

   }

  } catch (IOException e) {

   e.printStackTrace();

  }

 }

 

 /**

  * 检查远端文件是否存在

  * @param remoteFileName

  * @return

  */

 @SuppressWarnings("unchecked")

 public  boolean checkFileName(String remotePath, String remoteFileName) {

  checkConnect(ftpClient);

  changeWorkingDirectory(remotePath);

  boolean result = false;

  try {

   FTPFile[] files = ftpClient.listFiles("*");

   System.out.print(ftpClient.getReplyString());

   if (files == null || files.length == 0) {

    System.out.println("【FTPTools】:There has not any file!");

    //user.writeLog("【FTPTools】:There has not any file!");

   } else {

    TreeSet<FTPFile> fileTree = new TreeSet(new Comparator() {

     // 先按照文件的类型排序(倒排),然后按文件名顺序排序

     public int compare(Object objFile1, Object objFile2) {

      if (objFile1 == null) {

       return -1;

      } else if (objFile2 == null) {

       return 1;

      } else {

       FTPFile file1 = (FTPFile) objFile1;

       FTPFile file2 = (FTPFile) objFile2;

       if (file1.getType() != file2.getType()) {

        return file2.getType() - file1.getType();

       } else {

        return file1.getName().compareTo(

          file2.getName());

       }

      }

     }

    });

    for (FTPFile file : files) {

     fileTree.add(file);

    }

    for (FTPFile file : fileTree) {

     if (file.getName().equals(remoteFileName)) {

      result = true;

      break;

     }

    }

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

  changeToParentDirectory();

  return result;

 }

 

 /**

  * 检测文件或文件夹是否存在

  * @param fileName --文件或文件夹名称

  * @return

  */

 public  boolean isExist(String fileName) {

  checkConnect(ftpClient);

  boolean tmp = false;

  try {

   System.out.println("【FTPTools】:当前目录为"

     + ftpClient.printWorkingDirectory());

   // user.writeLog("【FTPTools】:当前目录为" +

   // ftpClient.printWorkingDirectory());

   String[] strs = ftpClient.listNames();

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

    if (strs[i].equals(fileName)) {

     tmp = true;

    }

   }

  } catch (IOException e) {

   e.printStackTrace();

  }

  return tmp;

 }

 

 public void checkConnect(){

  checkConnect(this.ftpClient);

 }

 

 private void checkConnect(FTPClient ftpClient) {

  if (ftpClient == null) {

   openConnect();

  } else {

   try {

    ftpClient.stat();

   } catch (IOException e) {

    try {

     ftpClient.setDefaultPort(port);

     ftpClient.configure(getFtpConfig());

     ftpClient.connect(hostname);

     ftpClient.login(uid, pwd);

     ftpClient.setControlEncoding("GB18030");

     System.out.print(ftpClient.getReplyString());

     int reply = ftpClient.getReplyCode();

 

     if (!FTPReply.isPositiveCompletion(reply)) {

      ftpClient.disconnect();

      // user.writeLog("【FTPTools】:FTP server refused connection.");

      System.out.println("【FTPTools】:FTP server refused connection.");

     } else {

      if (ftpClient.login(uid, pwd)) {

       // 设置为passive模式

       ftpClient.enterLocalPassiveMode();

      }

      // user.writeLog("【FTPTools】:登录ftp服务器[" + hostname+ "]成功");

      System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]成功");

      System.out.println("【FTPTools】:当前目录为"

        + ftpClient.printWorkingDirectory());

      // user.writeLog("【FTPTools】:当前目录为" +

      // ftpClient.printWorkingDirectory());

     }

    } catch (Exception e2) {

     // user.writeLog("【FTPTools】:登录ftp服务器[" + hostname + "]失败");

     System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]失败");

     e2.printStackTrace();

    }

   }

  }

 }

 

 /**

  * 测试

  * @param args

  * @throws IOException

  */

 public static void main(String[] args) throws IOException {

  FTPTools ftp = new FTPTools( "aaaa", "bbbb",

    "127.0.0.1");

  ftp.loadFile("/test" , "temp.txt", "C:/" , "");

  ftp.closeConnect();

 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值