资讯专栏INFORMATION COLUMN

推荐一个java操作ftp的工具类

techstay / 3579人阅读

摘要:写在前面作为经常使用电脑整理文件的童鞋,应该都使用过从服务器上传下载文件,那么今天就了解下如何通过程序操作服务的文件首先你要知道的,路径,端口,有操作权限的账号和密码导入包这个包用来设置编码,经过测试,不加也可用工具类中主要方法登陆验证

写在前面

作为经常使用电脑整理文件的童鞋,应该都使用过从ftp服务器上传下载文件,那么今天就了解下如何通过java程序操作ftp服务的文件

首先你要知道ftp的ip,路径,端口,有操作权限的账号和密码
1 导入jar包
 commons-net-3.6.jar

这个jar包用来设置编码,经过测试,不加也可用

2 工具类中主要方法 2.1 登陆ftp
    /**
     * 验证登录
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @return
     */
    public boolean login(String ip,int port, String name, String pwd) {
        try {
            ftp = new FTPClient();
            ftp.connect(ip, port);
            System.out.println(ftp.login(name, pwd));
            if(!ftp.login(name, pwd)){
                return false;
            }
            ftp.setCharset(Charset.forName("UTF-8"));
            ftp.setControlEncoding("UTF-8");

        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
注意:获取远程文件目录,上传和下载方法基于登陆方法
2.2 获取远程文件目录
    /**
     * 获取ftp某一文件(路径)下的文件名字,用于查看文件列表
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @param remotedir 远程地址目录
     * @return
     */
    public boolean getFilesName(String ip,int port, String name, String pwd, String remotedir) {
        try {
            if(!login(ip, port, name, pwd)){
                return false;
            }
            //获取ftp里面,指定文件夹 里面的文件名字,存入数组中
            FTPFile[] files = ftp.listFiles(remotedir);
            //打印出ftp里面,指定文件夹 里面的文件名字
            for (int i = 0; i < files.length; i++) {
                System.out.println(files[i].getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally{
            this.close();
        }
        return true;
    }
2.3 上传文件
    /**
     * 上传文件 方法一
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @param remotepath 远程地址文件路径
     * @param localpath 本地文件路径
     * @return
     */
    public boolean putFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) {
        try {
            if(!login(ip, port, name, pwd)){
                return false;
            }
            //将本地的 localpath 文件上传到ftp的根目录文件夹下面,并重命名为 remotepath中的名字
             return ftp.storeFile(remotepath, new FileInputStream(new File(localpath)));
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally{
            this.close();
        }
    }
    
    /**
     * 上传文件的第二种方法,优化了传输速度
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @param remotepath 远程地址文件路径
     * @param localpath 本地文件路径
     * @return
     */
    public boolean putFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) {
        try {
            if(!login(ip, port, name, pwd)){
                return false;
            }
            os = ftp.storeFileStream(remotepath);
            fis = new FileInputStream(new File(localpath));
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = fis.read(b)) != -1) {
                os.write(b,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            this.close();
        }
        return true;
    }
2.4 下载文件
    /**
     * 下载文件 方法一
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @param remotepath 远程地址文件路径
     * @param localpath 本地文件路径
     * @return
     */
    public boolean getFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) {
        try {
            if(!login(ip, port, name, pwd)){
                return false;
            }
            //将ftp资源中 remotepath 文件下载到本地目录文件夹下面,并重命名为 localpath 中的名字
            return ftp.retrieveFile(remotepath, new FileOutputStream(new File(localpath)));
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally{
            this.close();
        }
    }
    
    /**
     * 下载文件的第二种方法,优化了传输速度
     * @param ip
     * @param port
     * @param name
     * @param pwd
     * @param remotepath 远程地址文件路径
     * @param localpath  本地文件路径
     * @return
     */
    public boolean getFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) {
        try {
            if(!login(ip, port, name, pwd)){
                return false;
            }
            is = ftp.retrieveFileStream(remotepath);
            fos = new FileOutputStream(new File(localpath));
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = is.read(b)) != -1) {
                fos.write(b,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            this.close();
        }
        return true;
    }
3 源码

当然上面代码只是重要的部分,如果有问题可去github自行下载 charmsongo

如果有什么更好的方法欢迎留言

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72614.html

相关文章

  • 【译】PHP:40+开发工具推荐

    摘要:今天,就为开发者介绍个方便的工具。对开发者来说,是一个非常有用的工具,它提供了超过个有用的函数。该工具检查输入源代码和报告任何违反给定的标准。框架是一个开发的工具。它侧重于安全性和性能,绝对是最安全的开发框架之一。 PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。...

    dreambei 评论0 收藏0
  • Windows平台后端开发环境神器Laragon——裂墙推荐

    摘要:是一个可移植,隔离,快速且功能强大的通用开发环境,适用于,,,,,。每每这样都绝望地将项目放到推荐的标准开发环境上面跑,杀鸡也用牛刀着实不痛快。 Laragon is a portable, isolated, fast & powerful universal development environment for PHP, Node.js, Python, Java, Go, Ru...

    CoderDock 评论0 收藏0
  • Windows平台后端开发环境神器Laragon——裂墙推荐

    摘要:是一个可移植,隔离,快速且功能强大的通用开发环境,适用于,,,,,。每每这样都绝望地将项目放到推荐的标准开发环境上面跑,杀鸡也用牛刀着实不痛快。 Laragon is a portable, isolated, fast & powerful universal development environment for PHP, Node.js, Python, Java, Go, Ru...

    yanest 评论0 收藏0
  • java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) exce

    摘要:消费之后,多线程处理文件导出,生成文件后上传到等文件服务器。前端直接查询并且展现对应的任务执行列表,去等文件服务器下载文件即可。这客户体验不友好,而且网络传输,系统占用多种问题。拓展阅读导出最佳实践框架 产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件。 需求分析 对于 excel 导出,是一个很常见的需求。 最常见的解决方案就是使用 poi 直接同步导出一个 exc...

    K_B_Z 评论0 收藏0

发表评论

0条评论

techstay

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<