博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FtpUtil
阅读量:6611 次
发布时间:2019-06-24

本文共 10790 字,大约阅读时间需要 35 分钟。

hot3.png

package com.its.mmo.common.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.SocketException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;/** *  * FTP工具类 *  */public class FtpUtil {        /**     * 向FTP服务器上传文件     *      * @param url FTP服务器hostname     * @param port FTP服务器端口     * @param username FTP登录账号     * @param password FTP登录密码     * @param path FTP服务器保存目录     * @param filename 上传到FTP服务器上的文件名     * @param localFilePath 需要上传的本地文件路径     * @return 成功返回true,否则返回false     * @throws IOException     */    public static boolean uploadFile(String url, int port, String username, String password, String path,        String filename, String localFilePath)        throws IOException {        InputStream input;                input = new FileInputStream(localFilePath);                return uploadFile(url, port, username, password, path, filename, input);    }        /**     * 向FTP服务器上传文件     *      * @param url FTP服务器hostname     * @param port FTP服务器端口     * @param username FTP登录账号     * @param password FTP登录密码     * @param path FTP服务器保存目录     * @param filename 上传到FTP服务器上的文件名     * @param input 输入流     * @return 成功返回true,否则返回false     * @throws IOException     */    public static boolean uploadFile(String url, int port, String username, String password, String path,        String filename, InputStream input)        throws IOException {        // 初始表示上传失败        boolean result = false;        FTPClient ftp = login(url, port, username, password);        if (ftp == null)            return false;        // 转到指定上传目录        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);        String str[] = path.split("/");        String resultPath = "";        for (String s : str) {            if (!"".equals(s)) {                resultPath = resultPath + "/" + s;                if (!"".equals(resultPath) && !isDirExist(resultPath, ftp)) {                    // 创建文件夹                    ftp.makeDirectory(resultPath);                }            }        }        ftp.changeWorkingDirectory(path);        // 将上传文件存储到指定目录        ftp.storeFile(UTFToiso8859(filename), input);        // 关闭输入流        input.close();        // 退出ftp        ftp.logout();        // 表示上传成功        result = true;        if (ftp.isConnected()) {            ftp.disconnect();        }        return result;    }        /**     * 判断文件夹是否存在     *      * @param path     * @param ftpClient     * @return     */    private static boolean isDirExist(String path, FTPClient ftpClient) {        try {            return ftpClient.changeWorkingDirectory(path);        }        catch (Exception e) {            return false;        }    }        /**     * 判断文件是否存在     *      * @param path     * @param ftpClient     * @return     */    public static boolean isFileExist(String url, int port, String username, String password, String path, String name) {        FTPClient ftp = login(url, port, username, password);        // boolean is=false;        if (ftp == null)            return false;        try {            ftp.changeWorkingDirectory(path);            // 列出该目录下所有文件            FTPFile[] fs = ftp.listFiles();            // 遍历所有文件,找到指定的文件            for (FTPFile ff : fs) {                String filename = new String(ff.getName().toString().getBytes("iso-8859-1"), "UTF-8");                if (filename.equals(name)) {                    return true;                }            }            return false;        }        catch (Exception e) {            return false;        }    }        private static String UTFToiso8859(Object obj) {        try {            if (obj == null)                return "";            else                return new String(obj.toString().getBytes("UTF-8"), "iso-8859-1");        }        catch (Exception e) {            return "";        }    }        /**     * 从FTP服务器下载文件     *      * @param url FTP服务器hostname     * @param port FTP服务器端口     * @param username FTP登录账号     * @param password FTP登录密码     * @param remotePath FTP服务器上的相对路径     * @param fileName 要下载的文件名     * @param localPath 下载后保存到本地的路径     * @return     */    public static boolean downFile(String url, int port, String username, String password, String remotePath,        String fileName, String localPath) {        // 初始表示下载失败        boolean result = false;        // 创建FTPClient对象        FTPClient ftp = login(url, port, username, password);        if (ftp == null)            return false;        try {            ftp.changeWorkingDirectory(remotePath);            // 列出该目录下所有文件            FTPFile[] fs = ftp.listFiles();            // 遍历所有文件,找到指定的文件            for (FTPFile ff : fs) {                if (ff.getName().equals(fileName)) {                    // 根据绝对路径初始化文件                    File localFile = new File(localPath + File.separator + ff.getName());                    // 输出流                    OutputStream is = new FileOutputStream(localFile);                    // 下载文件                    ftp.retrieveFile(ff.getName(), is);                    is.close();                }            }            // 退出ftp            ftp.logout();            // 下载成功            result = true;        }        catch (IOException e) {            logger.error("下载文件时发生IO错误:", e);        }        finally {            if (ftp.isConnected()) {                try {                    ftp.disconnect();                }                catch (IOException ioe) {                    logger.error("下载文件时发生IO错误:", ioe);                }            }        }        return result;    }        /**     * 下载文件,写入输出流     *      * @param url     * @param port     * @param username     * @param password     * @param remotePath     * @param fileName     * @param is     */    public static void downloadFile(String url, int port, String username, String password, String remotePath,        String fileName, OutputStream is) {        // 创建FTPClient对象        FTPClient ftp = login(url, port, username, password);        try {            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);            ftp.changeWorkingDirectory(remotePath);            // 列出该目录下所有文件            FTPFile[] fs = ftp.listFiles();            // 遍历所有文件,找到指定的文件            for (FTPFile ff : fs) {                String name = new String(ff.getName().toString().getBytes("iso-8859-1"), "UTF-8");                if (name.equals(fileName)) {                    // 下载文件                    ftp.retrieveFile(ff.getName(), is);                }            }        }        catch (IOException e) {            logger.error("下载文件时发生IO错误:", e);        }        finally {            try {                is.flush();                is.close();            }            catch (IOException e) {                logger.error("关闭文件输出流时发生IO错误:", e);            }            disconnectFtp(ftp);        }    }        /**     * 列出远程路径下的文件列表     *      * @param url     * @param port     * @param username     * @param password     * @param remotePath     * @return     */    public static FTPFile[] listFilesByPath(String url, int port, String username, String password, String remotePath) {        FTPClient ftp = login(url, port, username, password);        return listFilesByPath(ftp, remotePath);    }        /**     * 列出远程路径下的文件列表     *      * @param ftp     * @param remotePath     * @return     */    public static FTPFile[] listFilesByPath(FTPClient ftp, String remotePath) {        try {            boolean success = ftp.changeWorkingDirectory(remotePath);            if (success) {                return ftp.listFiles();            }            else {                return null;            }        }        catch (IOException e) {            logger.error("列出相对路径下的文件列表时发生IO错误:", e);            return null;        }        finally {            disconnectFtp(ftp);        }    }        /**     * 登录ftp     *      * @param url ftp ip地址     * @param port 端口     * @param username 用户名     * @param password 密码     * @return 登录成功返回 FTPClient对象,否则返回null     */    private static FTPClient login(String ip, int port, String username, String password) {        try {            // 创建FTPClient对象            FTPClient ftp = new FTPClient();            // 连接FTP服务器            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器            ftp.connect(ip, port);            // 登录ftp            ftp.login(username, password);            // 看返回的值是不是230,如果是,表示登陆成功,以2开头的返回值就会为真            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {                ftp.disconnect();                return null;            }            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);            return ftp;        }        catch (SocketException e) {            logger.error("登录ftp时发生socket错误:", e);            return null;        }        catch (IOException e) {            logger.error("登录ftp时发生IO错误:", e);            return null;        }    }        /**     * 断开FTP链接     *      * @param ftp     */    private static void disconnectFtp(FTPClient ftp) {        if (ftp != null && ftp.isConnected()) {            try {                // 退出ftp                ftp.logout();                ftp.disconnect();            }            catch (IOException ioe) {                logger.error("断开FTP链接时发生IO错误:", ioe);            }        }    }        public static boolean crearDir(String url, int port, String username, String password, String remotePath)        throws IOException {        FTPClient ftp = login(url, port, username, password);        if (ftp != null) {            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);            if (!isDirExist(remotePath, ftp)) {                // 创建文件夹                ftp.makeDirectory(remotePath);                return true;            }            else {                return false;            }        }        return false;    }        public final static Log logger = LogFactory.getLog(FtpUtil.class);        public static void main(String[] args)        throws UnsupportedEncodingException {        FTPClient ftp = login("192.168.2.222", 21, "testFtp", "testFtp");        // FTPFile[] list = listFilesByPath(ftp, new String("/ssim资料".getBytes("utf8"), "ISO8859_1"));        // for (FTPFile file : list) {        // // System.out.println(new String(file.getName().getBytes("ISO8859_1"), "utf8") + ":" + file.isDirectory());        // DateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");        // System.out.println(format.format(file.getTimestamp().getTime()).toString());        // }        System.out.println(isDirExist("/admin/test", ftp));    }}

 

转载于:https://my.oschina.net/unteacher/blog/847937

你可能感兴趣的文章
k sum(lintcode)
查看>>
Android 控件属性
查看>>
【244】◀▶IEW-Unit09
查看>>
Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
查看>>
用任务计划管理计划任务对付任务计划-禁止WPS提示升级
查看>>
Android——SlidingMenu学习总结
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
UI概念体系要素
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
performSelectorInBackground V.S detachNewThreadSelector?
查看>>
linux,Centos,bash: service: command not found
查看>>
【转】UIColor对颜色的自定义
查看>>
php编译报错 configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-...
查看>>
asp.net后台进程做定时任务
查看>>
Ural_1671. Anansi's Cobweb(并查集)
查看>>
给vs2012换肤
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
查看>>