失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java ftp 上传文件名乱码

Java ftp 上传文件名乱码

时间:2023-05-31 19:46:43

相关推荐

Java  ftp 上传文件名乱码

场景描述:

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

废话没有,直接上代码。

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();pletePendingCommand();System.out.println("------------------ " + fileName + " 读取文件 结束 --------------------------");return retList;

此处遇到问题:

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

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 上传文件名乱码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。