关于FTP读取文件名中文名乱码问题
遍历FTP文件,出现中文乱码问题
建立FTP连接,遍历文件出现中文乱码问题,是由于FTP Server 协议里规定文件名编码是iso-8859-1,在遍历之前先设置好编码格式为setControlEncoding("GBK");,这里使用的是apache common-net包,直接贴代码:
package Test; import java.io.File; import java.io.IOException; import java.net.SocketException; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.w3c.dom.Element; public class FTPRead { /** * @param args * */ private static FTPClient ftpClient; private static String ip="192.168.4.202"; private static int port=21; private static String username="admin"; private static String password="admin"; public static void main(String[] args) throws IOException { FTPRead ftp=new FTPRead(); ftp.loginFTP(); ftp.loadxml(); } //连接登录FTP public FTPClient loginFTP(){ ftpClient = new FTPClient(); ftpClient.setControlEncoding("GBK"); try{ ftpClient.setStrictReplyParsing(false); ftpClient.connect(ip, port); ftpClient.login(username, password); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); int replyCode = ftpClient.getReplyCode(); System.out.println("---"+replyCode); return ftpClient; }catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void loadxml() throws IOException{ try { //切换到当前目录 ftpClient.changeWorkingDirectory("/lzb/"); //获取当前目录下的所有文件及文件夹 FTPFile[] files=ftpClient.listFiles(); //遍历输出 for(FTPFile file:files){ System.out.println("读取:"+new String(file.getName())); } ftpClient.retrieveFileStream(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //退出登录 ftpClient.logout(); //断开连接 ftpClient.disconnect(); } }