当前位置: 首页 > news >正文

Commons.net FTPClient 上传文件

使用 Commons.net FTPClient 上传 文件打不开。

原因,FTPClient 默认使用 ASCII 传输文件,FTP.ASCII_FILE_TYPE;

需要在登录代码后重新指定传输方式。

    public static void main(String[] args) {
        FTPClient ftpClient = new FTPClient();
        try {
            // 连接指定服务器,默认端口为21
            ftpClient.connect("XXX.XXX.XXX.XXX",921);
            System.out.println("connect to server");
            // 默认是 ISO-8859-1 设置成 UTF-8 读文件时防止文件名出现乱码
            ftpClient.setControlEncoding("UTF-8");
            // 获取响应字符串(FTP服务器上可设置)
            String replyString = ftpClient.getReplyString();
            System.out.println("replyString: " + replyString);

            // 获取响应码用于验证是否连接成功
            int reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                System.out.println(reply);
                System.exit(1);
            }
            // 登录服务器
            boolean login = ftpClient.login("iron", "iron"); //不知道空用户名密码怎么使用。
            if (login) {
                System.out.println("登录成功!");
            } else {
                System.out.println("登录失败!");
            }
            //默认为ASCII_FILE_TYPE,修改成BINARY_FILE_TYPE防止文件打不开
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 获取所有文件和文件夹的名字


            // 生成InputStream用于上传本地文件
            InputStream in = new FileInputStream("D:\\Libraries\\Desktop\\QQ截图20170321150849.jpg");
            // 上传文件--防止中文名出现乱码。需要将文件名做特殊处理
            boolean result = ftpClient.storeFile(new String("QQ截图3.jpg".getBytes("UTF-8"),"iso-8859-1"), in);
            //框架提供了多种上传方法
            //ftpClient.appendFileStream(String remote) throwsIOException
            //ftpClient.appendFile(String remote,InputStream local) throws IOException
            //ftpClient.storeFileStream(String remote) throwsIOException
            //ftpClient.storeFile(String remote,InputStream local) throws IOException
            if (result) {
                System.out.println("上传成功!");
            }
            in.close();
            //查看FTP中的文件
            FTPFile[] files = ftpClient.listFiles();
            for (FTPFile file : files) {
                if (file.isDirectory()) {
                    System.out.println(file.getName() + " 是文件夹");
                }
                if (file.isFile()) {
                    System.out.println(file.getName() + " 是文件");
                }
            }
            // 注销登录
            boolean logout = ftpClient.logout();
            if (logout) {
                System.out.println("注销成功!");
            } else {
                System.out.println("注销失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭链接需要放在finally语句块中
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

  

相关文章:

  • AIO - 概述
  • Azure Redis Cache (5) Redis Cache Cluster集群模式
  • 白盒测试
  • SQL Server 2008 部分改变
  • Python将被加入高考科目
  • [转]使用WinINet和WinHTTP
  • Microsoft Ribbon for WPF 正式发布
  • 【原创】简单的局域网内无线文件传输(1)
  • 给初学者:JavaScript 中数组操作注意点
  • 阿里研究院崔瀚文:“单身经济”背后的“新家园”
  • 在Hyper-V下Linux不能使用鼠标
  • 005——VUE中的v-text与v-html的使用
  • 控制反转IOC与依赖注入DI
  • 开源免费接口管理平台 eoLinker V3.1.7发布+开源版部署指南一份
  • Android ListView A~Z快速索引(改进版)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • Akka系列(七):Actor持久化之Akka persistence
  • JS函数式编程 数组部分风格 ES6版
  • leetcode98. Validate Binary Search Tree
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 微信小程序开发问题汇总
  • 我的面试准备过程--容器(更新中)
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 优化 Vue 项目编译文件大小
  • #define与typedef区别
  • #HarmonyOS:基础语法
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)(1.13) SiK无线电高级配置(五)
  • (4)事件处理——(7)简单事件(Simple events)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)c52学习之旅-流水LED灯
  • (转)ABI是什么
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)深入super,看Python如何解决钻石继承难题
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Family_物联网
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 常见的偏门问题
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 指南:抽象化实现的基类
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • /proc/interrupts 和 /proc/stat 查看中断的情况