>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23408 个阅读者 刷新本主题
 * 贴子主题:  【Java网络编程专题】用Apache FTPClient在FTP服务器上创建目录 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2020-01-10 11:59:31     消息  查看  搜索  好友  邮件  复制  引用

参考资料

(1)Apache FTPClient JAR的下载地址:
http://www.apache.org/dist/commons/net/binaries/
(2)Apache FTPClient API的JavaDoc文档:
http://commons.apache.org/proper/commons-net/apidocs/
(3)本文参考笔者所写的《Java网络编程核心技术详解》,电子工业出版社出版。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小


以下范例先登录到FTP服务器,然后再创建目录,然后再上传文件


    public boolean upLoadFile(File file, String path, String fileName) throws IOException {
        boolean result = false;
        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect("www.myftp.com",21);  //指定FTP的IP地址或域名,以及端口
            ftpClient.login("username", "password");  //指定登录FTP服务器的用户名和口令
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

            // 创建多级目录
            if (path != null && !"".equals(path.trim())) {
                String[] pathes = path.split("/");
                for (String onepath : pathes) {
                    if (onepath == null || "".equals(onepath.trim())) {
                        continue;
                    }

                    onepath=new String(onepath.getBytes("GBK"),"iso-8859-1");                  
                    if (!ftpClient.changeWorkingDirectory(onepath)) {
                        ftpClient.makeDirectory(onepath); //创建目录
                        ftpClient.changeWorkingDirectory(onepath);  //转到当前工作目录
                    }
                }
            }

            //在当前工作目录中上传文件
            result = ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), new FileInputStream(file));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ftpClient.logout();
        }
        return result;
    }

在以上代码中,还处理了中文目录出现乱码的问题:
  使用org.apache.commons.net.ftp.FTPClient创建中文目录、上传中文文件名时,目录名及文件名中的中文显示为“??”。

原因:FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码。

解决方案:

  1.将中文的目录或文件名转为iso-8859-1编码的字符。参考代码:

   String name="目录名或文件名";
   name=new String(name.getBytes("GBK"),"iso-8859-1");// 转换后的目录名或文件名。

  2.设置linux环境变量

export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"

作者:孙卫琴

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 admin 在 2021-10-09 11:00:17 重新编辑]
  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->JSP技术详解(Ⅰ)
  JSP与Hibernate开发-->使用JPA和注解
  Java网络编程-->RMI框架
  精通Spring-->创建综合购物网站应用
  Vue3开发-->Vue Router路由管理器
  【Vue.js技术专题】注册全局组件和局部组件
  【Vue.js技术专题】自定义指令范例:v-drag指令
  【Spring Cloud Alibaba专题】按照集群模式搭建Redis集群
  【Java基础编程专题】使用和创建JavaDoc文档
  【持久化专题】为什么JPA和Hibernate的持久化方法都抛出运行...
  【Spring专题】@Query注解设定查询语句
  【Spring专题】通过JPA API实现Repository接口
  【Spring专题】@Query和@Modifying注解的增删改操作
  【持久化专题】JPA API的级联操作
  【持久化专题】从JPA API中获得Hibernate API
  【Java编程基础专题】用Scanner类读取用户在控制台输入的数据
  【Java网络编程专题】用Apache HttpClients下载网上的图片等...
  【持久化专题】比较JPA的EntityManager接口与Hibernate的Ses...
  【JavaWeb专题】在JavaWeb应用中对客户请求的异步处理
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。