java中ftp上传、下载、重命名、删除功能实现

来源:互联网 发布:java怎么开根号 编辑:程序博客网 时间:2024/05/17 01:02

与尼尔森数据对接使用了ftp技术,特别留下来作为备用。哎,弄完这个深知java遮掩的东西太多了,什么都是调用调用就完了,得去深入了解下底层东西。

package com.voole.util;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 org.apache.commons.net.ftp.FTP;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 FTPClient ftpClient = new FTPClient();    private  static String encoding = System.getProperty("file.encoding");        private static  FtpUtil instance;     Logger log = Logger.getLogger(FtpUtil.class);        /**     * 实例化FtpUtil     * @return     */   public synchronized static FtpUtil getInstance(){          if( instance == null ){              instance = new FtpUtil();          }          return instance;      }                  /**     * 连接FTP服务器     */    public  boolean login(String url, int port, String username,            String password){    try {            int reply;            ftpClient.connect(url); // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器,否则 ftp.connect(url, port);// 连接FTP服务器            ftpClient.login(username, password); // 登录            ftpClient.setControlEncoding(encoding);            reply = ftpClient.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) { // 检验是否连接成功            log.info("FTP连接失败");                ftpClient.disconnect();                return false;                }            log.info("FTP连接成功");         }catch (IOException e) {           e.printStackTrace();           closeCon(); //关闭       }        return true;    }            /**     * Description: 向FTP服务器上传文件     *     * @Version1.0     * @param url     *            FTP服务器hostname     * @param port     *            FTP服务器端口     * @param username     *            FTP登录账号     * @param password     *            FTP登录密码     * @param path     *            FTP服务器保存目录,如果是根目录则为“/”     * @param filename     *            上传到FTP服务器上的文件名     * @param input     *            本地文件输入流     * @return 成功返回true,否则返回false     */    public boolean uploadFile(String ftpPath,String filePath,String fileName) {        boolean result = false;        try {        if( ftpClient!=null ){          FileInputStream input = new FileInputStream(new File(filePath+fileName));            boolean change = ftpClient.changeWorkingDirectory(ftpPath); // 转移工作目录至指定目录下             ftpClient.setFileType(FTP.BINARY_FILE_TYPE);            if (change) {            log.info("成功切换目录到"+ftpPath);                result = ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), input);                if (result) {                log.info(fileName+",上传成功!");                }else{                log.info(fileName+",上传失败");                }            }            input.close();            }        } catch (IOException e) {            e.printStackTrace();        }         return result;    }     /**     * 将本地文件上传到FTP服务器上     *     *    public static void testUpLoadFromDisk(String url, int port, String username,            String password, String path, String filename,String filepath) {        try {            FileInputStream in = new FileInputStream(new File(filepath));            boolean flag = uploadFile(url, port, username,password, path, filename, in);            System.out.println(flag);        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }    /    /**     * 删除FTP上的文件     */        public static boolean removeFile(String srcFname){          boolean flag = false;          if( ftpClient!=null ){              try {                  flag = ftpClient.deleteFile(srcFname);              } catch (IOException e) {                  e.printStackTrace();                  closeCon();              }          }          return flag;      }          /**     * 改名FTP上的文件     */        public static boolean renameFile(String srcFname,String targetFname){          boolean flag = false;          if( ftpClient!=null ){              try {                  flag = ftpClient.rename(srcFname,targetFname);              } catch (IOException e) {                  e.printStackTrace();                  closeCon();              }          }          return flag;      }          /**      *<p>销毁ftp连接</p>       */      public static void closeCon(){          if(ftpClient !=null){              if(ftpClient.isConnected()){                  try {                      ftpClient.logout();                      ftpClient.disconnect();                  } catch (IOException e) {                      e.printStackTrace();                  }               }          }      }          /**     * 下载单个文件     */    public static boolean downloadFile(String ftpPath,String filePath,String fileName){    try {        if( ftpClient!=null ){          FileInputStream input = new FileInputStream(new File(filePath+fileName));            boolean change = ftpClient.changeWorkingDirectory(ftpPath); // 转移工作目录至指定目录下             ftpClient.setFileType(FTP.BINARY_FILE_TYPE);            if (change) {            FTPFile[] fs = ftpClient.listFiles();                  for(FTPFile ff:fs){                      if(ff.getName().equals(fileName)){                          File localFile = new File(filePath+"/"+ff.getName());                          OutputStream is = new FileOutputStream(localFile);                           ftpClient.retrieveFile(ff.getName(), is);                          is.close();                      }                  }              }            input.close();            }        } catch (IOException e) {            e.printStackTrace();        }     return true;    }     }  


0 0
原创粉丝点击