场景描述:

  1. 在系统中生成xml上传到指定目录中
  2. 定时监控指定目录,读取目录中文件,解析,执行业务操作后,将文件移动到指定目录。

废话没有,直接上代码。

1.上传

此处的处理没有生成文件后,将文件再上传,而是直接生成好xml格式字符串后, 转换为流上传。

            // 设置编码ftpClient.setControlEncoding("UTF-8");ftpClient.enterLocalPassiveMode();// 创建目录, 如果目录已存在, 则返回false, 如果目录不存在就创建并返回trueboolean makeDirectory = ftpClient.makeDirectory(formatPathName(pathName));            for (Entry<String, InputStream> entry : map.entrySet()) {String fn = entry.getKey();InputStream fin = entry.getValue();// 执行上传result = ftpClient.storeFile(formatPathName(fn), fin);if (!result) {log.error(String.format("----FTP文件[%s]上传失败----", fn));return false;}}

上传时遇到的问题:

  • 一开始ftpClient.setControlEncoding("UTF-8"); 编码设置的是GBK,上传也正常。用记事本打开xml文件中文也没有乱码,但是当用浏览器打开文件是就是乱码,无法预览,搞的很郁闷。因为没有乱码, 也没想到是这个地方编码的问题。然后各种搜,也没有找到跟我类似的问题, 但是看到有的例子里面用的是UTF-8, 我也就试着改了一下。然后,就可以了。

2.获取目录下所有文件夹名称

        ftpClient.setControlEncoding("UTF-8");ftpClient.enterLocalPassiveMode();FTPFile[] ftpFiles = ftpClient.listFiles();List<String> retList = new ArrayList<String>();if (ftpFiles == null || ftpFiles.length == 0) {return retList;}for (FTPFile ftpFile : ftpFiles) {// 判断是否时目录if (ftpFile.isDirectory()) {retList.add(new String(ftpFile.getName().getBytes("UTF-8")));}}return retList;

此处问题同样是乱码问题,如代码中设置即可解决。

3.获取文件内容

        ftpClient.setControlEncoding("UTF-8");ftpClient.enterLocalPassiveMode();FTPFile[] ftpFiles = ftpClient.listFiles(formatPathName(fileName));List<String> retList = new ArrayList<String>();if (ftpFiles == null || ftpFiles.length == 0) {return retList;}System.out.println("------------------ " + fileName + " 读取文件  开始 --------------------------");InputStream retrieveFileStream = ftpClient.retrieveFileStream(formatPathName(fileName));BufferedReader br = new BufferedReader(new InputStreamReader(retrieveFileStream, "GB2312"));// 构造一个BufferedReader类来读取文件String s = null;while ((s = br.readLine()) != null) {// 使用readLine方法,一次读一行retList.add(s);}br.close();retrieveFileStream.close();ftpClient.completePendingCommand();System.out.println("------------------ " + fileName + " 读取文件  结束 --------------------------");return retList;

此处遇到问题:

  • 1.获取文件内容是, 是乱码。经过多次尝试, new InputStreamReader(retrieveFileStream, "GB2312")要使用GB2312.
  • 2.循环获取文件按内容是, 第一个文件读取完成后就停止了, 并没有继续往下执行。查了一下是被阻塞,需添加 ftpClient.completePendingCommand();

4.移动文件, 删除文件、删除目录等操作失败, 多数也是因为中文名称乱码导致。此处不再多说。

名称处理的方法:

 private String formatPathName(String str) throws UnsupportedEncodingException {// return new String(str.getBytes("GBK"), "iso-8859-1");return new String(str.getBytes("UTF-8"), "iso-8859-1");}

Java ftp 上传文件名乱码相关推荐

  1. java ftp上传文件相关代码梳理

    java实现ftp文件上传 1.ftp文件上传步骤 1)连接ftp 2)检查工作目录是否存在 3)检查是否上传成功 4)完成任务后,断开ftp 2.具体如下,直接贴上核心代码: A)导入核心pom依赖 ...

  2. java ftp 上传文件 无效_java实现FTP文件上传出现的问题

    昨天用JAVA写了一个实现FTP文件上传功能的类(是通过sun.net.ftp包实现的,此包为SUN的私有类包,所以官方没有提供相关API文档),然后进行了简单的测试. 具体类代码如下(此类的部分方法 ...

  3. java ftp 上传文件 进度条_java FTP上传文件(进度条显示进度)

    java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient.不知道为什么,在使用前一 ...

  4. java ftp上传文件_jaVA使用FTP上传下载文件的问题

    为了实现 FTP上传下载,大概试了两个方法 sun.net.ftp.FtpClient org.apache.commons.net 一开始使用sun.net.ftp.FtpClient,结果发现唯一 ...

  5. java ftp 上传文件到服务器,java实现ftp上传文件到服务器

    java实现ftp上传文件到服务器 内容精选 换一换 怎样上传文件到Windows操作系统云服务器?安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ ...

  6. java ftp上传文件0字节_FTP上传无文件以及0字节问题

    这几天在做一个FTP上传文件的功能,在本地运行完全没有问题,上传文件成功,图片成功显示.在公网(centos系统)上进行测试的时候就出了问题了,上传一直卡到storeFile上,一般是会卡住30-60 ...

  7. java ftp 上传下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式,),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 [java] view p ...

  8. java ftp上传文件 linux_Java实现把文件上传至ftp服务器

    用Java实现ftp文件上传.我使用的是commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包. 1 把commons-net-1.4.1.jar包加载到项目工程中去. ...

  9. java ftp上传文件内容为空

    文件上传成功 但是内容为空 需要加上 ftpClient.enterLocalPassiveMode(); 代码如下: package com.zhuoshi.jcbigdata.spark.jinj ...

  10. JAVA FTP 上传文件

    下面展示通过http 方式上传文件到服务器: /** 文件上传接口 @param request[module][filename] @param response @throws IOExcepti ...

最新文章

  1. redis报错Windows error 0x70--记录一次服务器雪崩异常
  2. android 滚动动画效果代码,Android Scroll滑动效果实例
  3. 「 每日一练,快乐水题 」682. 棒球比赛
  4. mysql ef_在EF中使用MySQL的方法及常见问题
  5. Flink应用实战案例50篇(一)- Flink SQL 在京东的优化实战
  6. [转载] python hex转字符串_Python hexstring-list-str之间的转换方法
  7. 【洛谷P3369】【模板】普通平衡树题解
  8. Hydra(弱密码爆破)使用教程
  9. 《我的青春谁做主》经典搞笑台词
  10. 【图文详解】环境变量中Path环境变量作用详解
  11. .bat、python与C++程序进行批量处理的学习与实践
  12. 【论文笔记】RSE//结合遥感数据和气象数据改进关中平原小麦产量估算的LSTM神经网络
  13. Wxpython pannel切换
  14. Pycharm 注册 Pycharm 破解 Pycharm 注册破解 亲测多法 仅此方有效 有效期至2099年
  15. 解读大学里的软件工程专业以及其他专业,给高考完的学弟妹一点参考
  16. Android实现简单的计算器功能
  17. 计算机网络—CSMA/CD协议
  18. 将mysql语句转换为sql_数据库-转换sql语句
  19. might和could的区别用法_can,could,may might,must,ought 的区别和用法
  20. Kafka SASL SCRAM授权java开发demo

热门文章

  1. BadBoy安装与使用
  2. bochs运行xp_bochs xp镜像下载
  3. 北理工计算机学院新闻,新闻睇睇睇 | 计算机学院举办第八届ACM/ICPC程序设计竞赛校内选拔赛暨北理工邀请赛...
  4. 树木分形迭代图 matlab,园林设计中分形理论的引入
  5. 浅谈企业信息化规划建设
  6. ubuntu下使用dos2unix
  7. 倪捷:智能语音扩展数字化服务
  8. python图表制作方法_python图表制作
  9. EasyCHM chm文件制作过程及软件附软件下载地址
  10. 网页调用OCX控件总结