`
福将1032
  • 浏览: 44563 次
文章分类
社区版块
存档分类
最新评论

FTPUtil

FTP 
阅读更多

package com.joyveb.lottery.util;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.joyveb.lottery.util.exception.FtpConnectException;
import com.joyveb.lottery.util.exception.FtpDownException;
import com.joyveb.lottery.util.exception.FtpUploadException;

public class FtpUtil {

    /** FTP地址 **/
    private String host;
    /** FTP端口 **/
    private int port;
    /** FTP用户名 **/
    private String username;
    /** FTP密码 **/
    private String password;
    /** FTP连接超时时间 */
    private int connectTimeout = 10000;
    /** 数据读写超时时间 */
    private int dataTimeout = 10000;

    private String tmppostfix = ".tmp";

    private FTPClient ftpClient = null;

    public FtpUtil() {
        ftpClient = new FTPClient();
    }

    public FtpUtil(String host, int port, String username, String password) {
        this();
        this.host = host;
        this.port = port;
        this.username = username;
        this.password = password;
    }

    /**
     * 连接ftp
     *
     * @throws FtpConnectException
     */
    public void connect() throws FtpConnectException {
        try {
            ftpClient.setConnectTimeout(this.connectTimeout);
            ftpClient.setDataTimeout(this.dataTimeout);
            ftpClient.connect(this.host, this.port);
            ftpClient.setControlEncoding("GBK");
            ftpClient.enterLocalPassiveMode();
            if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                if (!ftpClient.login(this.username, this.password)) {
                    throw new FtpConnectException(new StringBuffer()
                            .append("FTP登录失败,帐号或者密码错误ip:").append(host)
                            .append(",port:").append(port).append(",username:")
                            .append(username).append(",password:")
                            .append(password).toString());
                }
            }
        } catch (IOException e) {
            throw new FtpConnectException(new StringBuffer()
                    .append("连接FTP服务器异常ip:").append(host).append(",port:")
                    .append(port).append(",username:").append(username)
                    .append(",password:").append(password).toString(), e);
        }

    }

    // /**
    // * Ftp上传,并校验
    // *
    // * @param localpath
    // * @param remotepath
    // * @throws FtpUploadException
    // */
    // public void uploadVail(String identify, String localpath, String
    // remotepath)
    // throws FtpUploadException {
    // File tmpFile = null;
    // try {
    // File remotefile = new File(remotepath);
    // this.delete(remotefile.getParent(), remotefile.getName());
    // this.upload(localpath, remotepath + tmppostfix);
    // this.download(Constants.TMPDIR + remotefile.getName() + identify,
    // remotepath + tmppostfix);
    // tmpFile = new File(Constants.TMPDIR + remotefile.getName()
    // + identify);
    // FileHelp.md5Check(tmpFile, new File(localpath));
    // this.rename(remotefile.getParent(), remotefile.getName()
    // + tmppostfix, remotefile.getName());
    // } catch (Exception e) {
    // throw new FtpUploadException(
    // StringUtil.getStrBuffer().append("FTP文件校验上传异常ip:")
    // .append(host).append(",port:").append(port)
    // .append(",file:").append(localpath).toString(), e);
    // } finally {
    // if (tmpFile != null && tmpFile.exists()) {
    // tmpFile.delete();
    // }
    // }
    // }

    /**
     * FTP上传
     *
     * @param localpath
     * @param remotepath
     * @throws FtpUploadException
     */
    public void upload(String localpath, String remotepath)
            throws FtpUploadException {
        FileInputStream fis = null;
        try {
            // 设置以二进制流的方式传输
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            File remoteFile = new File(remotepath);
            ftpClient.changeWorkingDirectory("/");
            if (remoteFile.getParent() != null
                    && !ftpClient
                            .changeWorkingDirectory(remoteFile.getParent())) {
                this.createDir(remoteFile.getParent());
            }
            fis = new FileInputStream(localpath);
            if (remoteFile.exists()) {
                remoteFile.delete();
            }
            ftpClient.storeFile(
                    new String((remoteFile.getName() + tmppostfix).getBytes(),
                            ftpClient.getControlEncoding()), fis);
            ftpClient.rename(
                    new String((remoteFile.getName() + tmppostfix).getBytes(),
                            ftpClient.getControlEncoding()),
                    new String(remoteFile.getName().getBytes(), ftpClient
                            .getControlEncoding()));
        } catch (Exception e) {
            throw new FtpUploadException(
                    new StringBuffer().append("FTP文件上传异常ip:").append(host)
                            .append(",port:").append(port).append(",file:")
                            .append(localpath).toString(), e);
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    throw new FtpUploadException(e);
                }
            }
        }
    }

    /**
     * 修改名字
     *
     * @param remotepath
     * @param newName
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    public void rename(String dir, String oldName, String newName)
            throws UnsupportedEncodingException, IOException {

        if (StringUtils.isNotBlank(dir)) {
            this.changerToPath(dir);
        }
        ftpClient.rename(
                new String(oldName.getBytes(), ftpClient.getControlEncoding()),
                new String(newName.getBytes(), ftpClient.getControlEncoding()));
    }

    /**
     * 删除文件
     *
     * @param dir
     * @param fileName
     * @throws IOException
     */
    public void delete(String dir, String fileName) throws IOException {
        if (StringUtils.isNotBlank(dir)) {
            this.changerToPath(dir);
        }
        ftpClient.deleteFile(new String(fileName.getBytes(), ftpClient
                .getControlEncoding()));
    }

    /**
     * 下载FTP文件
     *
     * @param localpath
     * @param remotepath
     * @throws FtpDownException
     */
    public void download(String localpath, String remotepath)
            throws FtpDownException {
        BufferedOutputStream bos = null;
        try {
            ftpClient.changeWorkingDirectory("/");
            // 设置以二进制流的方式传输
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            File remoteFile = new File(remotepath);
            File localFile = new File(localpath);
            if (localFile.getParent() != null) {
                File localpfile = localFile.getParentFile();
                if (!localpfile.exists()) {
                    if (!localpfile.mkdirs()) {
                        throw new FtpDownException("创建目录失败:"
                                + localpfile.getPath());
                    }
                }
            }
            if (remoteFile.getParent() != null) {
                this.changerToPath(remoteFile.getParent());
            }
            bos = new BufferedOutputStream(new FileOutputStream(localFile));
            ftpClient.retrieveFile(new String(remoteFile.getName().getBytes(),
                    ftpClient.getControlEncoding()), bos);
            bos.flush();
        } catch (Exception e) {
            throw new FtpDownException(
                    new StringBuffer().append("FTP文件下载异常ip:").append(host)
                            .append(",port:").append(port).append(",file:")
                            .append(localpath).toString(), e);
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    throw new FtpDownException(e);
                }
            }
        }

    }

    /**
     * 转到目录下
     *
     * @param dir
     * @throws IOException
     * @throws Exception
     */
    private void changerToPath(String dir) throws IOException {

        StringBuffer sb = new StringBuffer();
        File file = new File(dir);
        File pfile = file.getParentFile();
        sb.append(file.getName());
        while (pfile != null) {
            sb.insert(0, pfile.getName() + "/");
            pfile = pfile.getParentFile();
        }
        ftpClient.changeWorkingDirectory("/");
        StringTokenizer s = new StringTokenizer(sb.toString(), "/");
        s.countTokens();
        String pathName = "";
        while (s.hasMoreElements()) {
            pathName = (String) s.nextElement();
            ftpClient.changeWorkingDirectory(pathName);
        }
    }

    /**
     * 创建文件夹
     *
     * @param dir
     * @throws IOException
     * @throws Exception
     */
    private void createDir(String dir) throws IOException {
        ftpClient.changeWorkingDirectory("/");
        StringBuffer sb = new StringBuffer();
        File file = new File(dir);
        File pfile = file.getParentFile();
        sb.append(file.getName());
        while (pfile != null) {
            sb.insert(0, pfile.getName() + "/");
            pfile = pfile.getParentFile();
        }
        StringTokenizer s = new StringTokenizer(sb.toString(), "/");
        s.countTokens();
        while (s.hasMoreElements()) {
            String pathName = (String) s.nextElement();
            if (!ftpClient.changeWorkingDirectory(pathName)) {
                ftpClient.makeDirectory(pathName);
                ftpClient.changeWorkingDirectory(pathName);
            }
        }
    }

    /**
     * 断开与远程服务器的连接
     *
     * @throws IOException
     *
     */
    public void disconnect() throws IOException {
        if (ftpClient != null && ftpClient.isConnected()) {
            ftpClient.disconnect();
        }
    }

    /**
     * 获取FTP地址
     *
     * @return
     */
    public String getHost() {
        return host;
    }

    /**
     * 设置FTP地址
     *
     * @param host
     */
    public void setHost(String host) {
        this.host = host;
    }

    /**
     * 获取FTP端口
     *
     * @return
     */
    public int getPort() {
        return port;
    }

    /**
     * 设置FTP端口
     *
     * @param port
     */
    public void setPort(int port) {
        this.port = port;
    }

    /**
     * 获取FTP用户名
     *
     * @return
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置FTP用户名
     *
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取FTP密码
     *
     * @return
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置FTP密码
     *
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }
}

分享到:
评论

相关推荐

    springboot-FtpUtil-master_springbootftputil_ftp_attentioniwd_DEM

    在本项目"springboot-FtpUtil-master_springbootftputil_ftp_attentioniwd_DEM"中,我们主要探讨的是如何在SpringBoot应用中集成FTP(File Transfer Protocol)客户端功能,以便实现文件的上传和下载操作。...

    最新版FTP上传需要的jar包和java FTPUtil例子

    标题提到的"FTPUtil例子"是一个Java类,它封装了FTP操作的逻辑,便于开发者在自己的项目中调用。 "commons-net-3.6.jar"是Apache Commons Net库的一个版本,这个库为Java提供了丰富的网络协议支持,包括FTP。Apache...

    ftputil python

    ftputil是一个Python库,专为简化FTP(文件传输协议)客户端编程而设计。它提供了一个高级接口,使得与FTP服务器交互类似于在本地文件系统上操作。这个库是为那些需要编写处理远程文件系统的应用程序的开发者量身...

    FtpUtil.java

    《FTPUtil.java——Java实现FTP文件传输工具类详解》 在Java编程中,FTPUtil.java是一个常见的工具类,用于处理FTP(File Transfer Protocol)文件传输协议相关的操作。它提供了便捷的方法来连接FTP服务器,上传、...

    ftputil.rar

    `ftputil`这个压缩包文件包含了一个Java实现的FTP客户端工具,可以帮助开发者通过编程方式登陆FTP服务器并遍历指定目录,获取其中的Java源代码文件。下面我们将详细探讨相关的知识点。 1. FTP基础: FTP是一个基于...

    FtpUtil.java(ftp工具类)

    ftp工具类,构造方法初始化类,连接ftp,列出所有文件内容,下载文件

    FTPUtil_ftp_

    FTPUtil_ftp_ 是一个基于Java编程语言实现的FTP客户端工具类,主要用于处理FTP(File Transfer Protocol)相关的操作,如上传文件、下载文件以及批量上传和下载。在IT行业中,FTP是一个广泛使用的协议,用于在计算机...

    基于springboot的FtpUtil工具类.zip

    《基于SpringBoot的FTPUtil工具类详解》 在IT领域,SpringBoot框架因其简洁的配置、快速的开发特性,已经成为Java开发的首选。而在实际项目中,文件上传和下载是常见的功能之一,FTP(File Transfer Protocol)作为...

    FtpUtil工具类

    淘淘商城FtpUtil工具类 , 使用java代码访问ftp服务器 使用apache的FTPClient工具访问ftp服务器

    FtpUtil工具类源码

    FtpUtil工具类源码

    FTPUtil.vb 利用Socket 实现FTP文件上传和文件下载

    FTPUtil.vb是一个VB.NET编写的实用工具,它利用Socket编程接口实现了FTP(File Transfer Protocol)文件上传和下载的功能。FTP是一种广泛应用于互联网上的协议,主要用于在客户端与服务器之间进行文件传输。Socket是...

    ftpUtil.zip,FTP相关工具类

    https://blog.csdn.net/weixin_45044097/article/details/109637761,这是原文。上传的资源是ftp上传的两个工具类,接近1500行代码,实现ftp连接,文件获取,上传,下载

    ftputil + ftpclientPOOL

    标题 "ftputil + ftpclientPOOL" 暗示了这个话题主要围绕两个Python库——ftputil和ftpclientPOOL,它们是用来处理FTP(文件传输协议)操作的工具。在这个场景下,我们可能会讨论如何使用这两个库进行高效的FTP文件...

    FTP文件上传

    这里我们将深入探讨如何在Java中实现图片文件的FTP上传,以及如何使用`FtpUtil.java`工具类。 首先,`FtpUtil.java`通常是一个封装了FTP操作的工具类,包括连接、登录、上传文件、断开连接等方法。在`FtpUtil`中,...

    FTPUtil.java

    java FTP工具类,里面包含登陆,注销,查询FTP文件夹,以及下载进度条输出

Global site tag (gtag.js) - Google Analytics