`

Java_util_ftp_operation

    博客分类:
  • Java
 
阅读更多

 

/**

*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();

 }

}

 

分享到:
评论

相关推荐

    java_util_concurrent_user_guide.zip

    java_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user...

    java_sql_Date与java_util_Date转换

    java_sql_Date与java_util_Date转换

    java_util_concurrent中文版pdf

    《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...

    java_util 工具包

    ### Java_util 工具包详解 #### 一、引言 `java.util`包作为Java标准库中的一个重要组成部分,提供了大量的实用工具类和接口,旨在简化开发者在处理数据结构、日期时间、事件处理等方面的工作。这个包包含了如日期...

    word2vec_java_util

    "word2vec_java_util" 指的是一个基于Java实现的Word2Vec工具包,专门用于处理文本数据并生成词向量。这个工具包可以帮助开发者在Java环境中利用Word2Vec算法对大规模文本数据进行预处理,从而提取出每个单词的向量...

    java_util_concurrent_user_guide

    `java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....

    PyPI 官网下载 | flask_util_js-0.2.10.tar.gz

    《PyPI官网下载 | flask_util_js-0.2.10.tar.gz——深入解析Python Flask实用工具库》 在Python的Web开发领域,Flask框架以其轻量级、灵活和可扩展性而广受欢迎。PyPI(Python Package Index)作为Python软件包的...

    java_util_concurrent_中文用户使用手册@微信公众号-架构探险之道.zip

    JUC使用指导手册 http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html 中文译文

    javaFtp.rar_FTP界面_FtpStatus.properties_JAVAFTP_java f_java ftp

    Java FTP程序是一个基于Java语言开发的应用,用于实现文件传输协议(FTP)的功能。这个程序能够进行FTP传输,即上传和下载文件,同时也包含了用户管理功能,允许用户进行登录和权限控制。尽管它的用户界面可能不够...

    cloudmusic_util.exe

    cloudmusic_util

    pc_util.py:python读写ply代码

    在python下的ply文件的读取存储工作,代码中存有对.ply文件的读取、存储函数。

    yintong_api_util-1.0.0.jar

    yintong_api_util-1.0.0.jar 工具类

    java_excel_util

    实现一个配置简单功能强大的excel工具类搞定大多数导入导出. ...对于J2EE项目导入导出Excel是最普通和实用功能, 本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是...

    util.zip_util

    在IT行业中,`util`通常指的是“utility”的缩写,代表工具或实用程序。`zip_util`则可能是一个专门处理ZIP文件的模块或库。ZIP是一种常见的文件压缩格式,广泛用于数据存储和传输。`util.zip_util`可能是为了简化...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    java_util_concurrent_user_guide_cn.pdf 内容预览: 1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 ...

    load_log_util.rar_log

    《Linux源码中的缩进块匹配与日志分析——load_log_util详解》 在Linux操作系统中,源代码的编写遵循一定的规范,其中就包括了代码的缩进规则。这种规范不仅提高了代码的可读性,也有助于理解程序的逻辑结构。`load...

    x509_util.zip_android_cert_ndk android_x509_x509_util

    在本案例中,`x509_util`库利用了NDK来解析X509证书的字节流,这是对Java层API的一个补充,因为Android的Java API虽然提供了处理X509证书的功能,但在处理大量证书或高性能需求时,可能会显得效率不足。 解析X509...

    weixin_util_java_message_weixin_

    微信发送消息的Java版本代码,可供学习与参考,包含发送消息代码和一些工具包

    nat.rar_VXWORKS nat_nat_nat vxworks_nat_util.c_vxworks

    这个"nat.rar_VXWORKS nat_nat_nat vxworks_nat_util.c_vxworks"的压缩包似乎包含了与VxWorks系统中的网络地址转换(NAT)相关的源代码。下面我们将深入探讨VxWorks中的NAT机制及其相关组件。 网络地址转换(NAT)...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...

Global site tag (gtag.js) - Google Analytics