ftp文件上传及下载工具类[通俗易懂]

ftp文件上传及下载工具类[通俗易懂]1、ftp文件上传用例解析(需使用apacher的commons-net-3.3.jar)publicclassTestFtp{@Testpublicvoidtest()throwsException{//1、创建FTP客户端FTPClientftpClient=newFTPClient();//2、

大家好,又见面了,我是你们的朋友全栈君。

1、ftp文件上传用例解析(需使用apacher的commons-net-3.3.jar)

public class TestFtp {

    @Test
    public void test() throws Exception {
        // 1、创建FTP客户端
        FTPClient ftpClient = new FTPClient();
        // 2、连接ftp地址
        ftpClient.connect("192.168.128.128", 21);
        // 3、登录
        ftpClient.login("ftpuser", "123456");
        // 4、设置文件存放目录
        ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
        // 5、设置上传文件类型(默认是文本)
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        // 6、指定文件名及文件输入流,上传文件
        FileInputStream is = new FileInputStream(new File("f:\\eee"));
        ftpClient.storeFile("hello.jpg", is);
        // 7、登出
        ftpClient.logout();
    }
}

2、ftp文件上传及下载工具类代码实现:

/** * @author CSDN_LQR * @TODO ftp上传下载工具类 */
public class FtpUtil { 
   

    /** * Description: 向FTP服务器上传文件 * * @param host * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param basePath * FTP服务器基础目录 * @param filePath * FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath * @param filename * 上传到FTP服务器上的文件名 * @param input * 输入流 * @return 成功返回true,否则返回false */
    public static boolean uploadFile(String host, int port, String username, String password, String basePath,
            String filePath, String filename, InputStream input) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);// 连接FTP服务器
            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }
            // 切换到上传目录
            if (!ftp.changeWorkingDirectory(basePath + filePath)) {
                // 如果目录不存在创建目录
                String[] dirs = filePath.split("/");
                String tempPath = basePath;
                for (String dir : dirs) {
                    if (null == dir || "".equals(dir))
                        continue;
                    tempPath += "/" + dir;
                    if (!ftp.changeWorkingDirectory(tempPath)) {
                        if (!ftp.makeDirectory(tempPath)) {
                            return result;
                        } else {
                            ftp.changeWorkingDirectory(tempPath);
                        }
                    }
                }
            }
            // 设置上传文件的类型为二进制类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 上传文件
            if (!ftp.storeFile(filename, input)) {
                return result;
            }
            input.close();
            ftp.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

    /** * Description: 从FTP服务器下载文件 * * @param host * FTP服务器hostname * @param port * FTP服务器端口 * @param username * FTP登录账号 * @param password * FTP登录密码 * @param remotePath * FTP服务器上的相对路径 * @param fileName * 要下载的文件名 * @param localPath * 下载后保存到本地的路径 * @return */
    public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
            String fileName, String localPath) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);
            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }
            ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                if (ff.getName().equals(fileName)) {
                    File localFile = new File(localPath + "/" + ff.getName());

                    OutputStream is = new FileOutputStream(localFile);
                    ftp.retrieveFile(ff.getName(), is);
                    is.close();
                }
            }

            ftp.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream(new File("D:\\temp\\image\\gaigeming.jpg"));
            boolean flag = uploadFile("192.168.25.133", 21, "ftpuser", "ftpuser", "/home/ftpuser/www/images",
                    "/2015/01/21", "gaigeming.jpg", in);
            System.out.println(flag);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

懒人地址:http://download.csdn.net/detail/csdn_lqr/9692906

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134697.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何撰写《软件需求规格说明书》

    1概述1.1编写目的指出编写《需求规格说明书》的目的。下面是示例:编写此文档的目的是进一步定制软件开发的细节问题,希望能使本软件开发工作更具体。为了使用户、软件开发者及分析和测试人员对该软件的初始规定有一个共同的理解,它说明了本软件的各项功能需求、性能需求和数据需求,明确标识各项功能的具体含义,阐述实用背景及范围,提供客户解决问题或达到目标所需要的条件或权能,提供一个度量和遵循的基准。…

    2022年4月6日
    45
  • visibilitychange – 指定标签页可见时,刷新页面数据

    visibilitychange – 指定标签页可见时,刷新页面数据三个知识点:一通过监听浏览器页面可见性改变(visibilitychange)事件,来判断标签页是否可见二配置路由的meta,来判断是否是指定的标签页三调用其它模块的actions,刷新数据router.jsroutes:[{path:”/”,redirect:”index”},{path:”/ind…

    2022年6月15日
    40
  • c语言中ff用16进制怎么表示什么,0xff(十六进制0xff表示什么)

    c语言中ff用16进制怎么表示什么,0xff(十六进制0xff表示什么)0xff从数值上看,0xff表示一个十六进制数FF,也就是十进制的255。从电平高低来看,比如读取P1口得到0xFF,表示P1口8个引脚都是高电平。以0x开始的数据表示16进制,0xff换成十进制为255。A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。16进制变十进制:f表示15。第n位的权值为16的n次方,由右.我现在要把这个16进制的数转换成2进制的或者是10…

    2022年6月19日
    104
  • idea激活码永久有效-激活码分享

    (idea激活码永久有效)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html9A…

    2022年3月22日
    747
  • hashlib加密「建议收藏」

    hashlib加密「建议收藏」加密算法介绍HASHHash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。…

    2022年4月30日
    55
  • golang代理转发基础「建议收藏」

    golang代理转发基础「建议收藏」golang代理转发基础go标准库已经实现了一个反向代理工具,通过代理将客户端的请求转发到代理服务器。什么是反向代理?维基百科解释:”Incomputernetworks,areverseproxyisatypeofproxyserverthatretrievesresourcesonbehalfofaclientfromoneormore…

    2022年7月26日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号