问题描述:需要读取远程服务器文件,但是远程服务器文件所在目录存在乱码,导致无法进入文件所在目录读取文件!
实现思路:通过FTP下载并转码到本地服务器之后,解决掉乱码问题之后再读取文件夹下的文件。
package com.guli.edu.FTPDown; import com.guli.edu.excel.ExcelUtils02; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class FTPDownLoadRemoteFile { private static Logger logger = LoggerFactory.getLogger("FTPDownLoadRemoteFile.class"); public boolean downFile(String ip, int port, String username, String password, String remotePath, String fileName, String localPath) { boolean success = false; FTPClient ftpc = new FTPClient(); String LOCAL_CHARSET="GBK"; try { logger.info("连接ftp----"); //ftpc.setCharset(Charset.forName("GBK")); //ftp中文编码设置 ftpc.setControlEncoding("GBK"); FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX); conf.setServerLanguageCode("zh"); ftpc.configure(conf); int reply; // ftpc.connect(ip,port); logger.info("--------------连接ftp成功--------------"); //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftpc.connect(ip); ftpc.login(username, password);//登录 reply = ftpc.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpc.disconnect(); return success; } logger.info("切换路径:"+remotePath); FTPFile[] fs = ftpc.listFiles(); //判断本地的日期路径是否存在 File file = new File(localPath); //判断文件夹是否存在,如果不存在则创建文件夹 if (!file.exists()) { file.mkdir(); } downFilePathRecursion(ftpc,remotePath,localPath); ftpc.logout(); success = true; }catch (Exception e){ // e.printStackTrace(); logger.error("ftp下载报错", e); }finally { if (ftpc.isConnected()) { try { ftpc.disconnect(); } catch (Exception ioe) { ioe.printStackTrace(); } } } return true; } //递归遍历下载文件、创建文件夹 public void downFilePathRecursion( FTPClient ftpc,String remotePath,String localPath) { try { FTPFile[] fs = ftpc.listFiles(); //判断本地的日期路径是否存在 File file = new File(localPath); //判断文件夹是否存在,如果不存在则创建文件夹 if (!file.exists()) { file.mkdir(); } for (int i = 0; i < fs.length; i++){ if (!fs[i].isDirectory()){//判断是否是文件夹 不是文件夹,则下载文件 logger.info("文件名称:"+fs[i].getName()); File localFile = new File(localPath+"/"+fs[i].getName()); OutputStream is = new FileOutputStream(localFile); ftpc.retrieveFile(new String(fs[i].getName().getBytes("utf-8"), "GBK"), is); is.close(); logger.info("下载完毕----"); }else if (fs[i].isDirectory()){//判断是否是文件夹 是文件夹,则递归遍历 logger.info("文件夹名称:"+fs[i].getName()); } } }catch (Exception e){ e.printStackTrace(); } }
参考连接:https://blog.csdn.net/weixin_33804990/article/details/93585653
参考连接:https://blog.csdn.net/weixin_33804990/article/details/93585653
标签:FTP,ftp,fs,String,ftpc,乱码,文件夹,import From: https://www.cnblogs.com/BigBen9527/p/17311235.html