java ftp文件上传中文乱码问题

    xiaoxiao2021-03-25  106

    找了很多资料。 参考这篇靠谱

    要点:

    /** 本地字符编码 */ private static String LOCAL_CHARSET = "GBK"; // FTP协议里面,规定文件名编码为iso-8859-1 private static String SERVER_CHARSET = "ISO-8859-1"; // 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK). try { if (FTPReply.isPositiveCompletion(client.sendCommand( "OPTS UTF8", "ON"))) { LOCAL_CHARSET = "UTF-8"; } } catch (IOException e) { e.printStackTrace(); }

    同样的 创建文件夹时中文乱码 处理

    client.makeDirectory( new String(remoteDir.getBytes(LOCAL_CHARSET),SERVER_CHARSET)); //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 public boolean CreateDirecroty(String remote) throws IOException { if(remote==null){ return false; } this.connectServer(); boolean success = true; String directory = remote + "/"; // String directory = remote.substring(0, remote.lastIndexOf("/") + 1); // 如果远程目录不存在,则递归创建远程服务器目录 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) { int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); String path = ""; String paths = ""; while (true) { // String subDirectory = new String(remote.substring(start, end).getBytes(LOCAL_CHARSET), SERVER_CHARSET); String subDirectory = remote.substring(start, end); logger.debug("目录编码:"+subDirectory); path = path + "/" + subDirectory; if (!existFile(path)) { // 处理编码 new String(subDirectory.getBytes(LOCAL_CHARSET),SERVER_CHARSET); if (makeDirectory(subDirectory)) { changeWorkingDirectory(subDirectory); } else { logger.debug("519创建目录[" + subDirectory + "]失败"); changeWorkingDirectory(subDirectory); } } else { changeWorkingDirectory(subDirectory); } paths = paths + "/" + subDirectory; start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } closeConnect(); return success; } //判断ftp服务器文件是否存在 public boolean existFile(String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = client.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } //创建目录 public boolean makeDirectory(String dir) { boolean flag = true; try { // new String(dir.getBytes(LOCAL_CHARSET),SERVER_CHARSET)) if (FTPReply.isPositiveCompletion(client.sendCommand( "OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK). LOCAL_CHARSET = "UTF-8"; } logger.debug(dir); logger.debug(""+new String(dir.getBytes(LOCAL_CHARSET),SERVER_CHARSET)); flag = client.makeDirectory(new String(dir.getBytes(LOCAL_CHARSET),SERVER_CHARSET)); if (flag) { logger.debug("创建文件夹" + dir + " 成功!"); } else { logger.debug("创建文件夹" + dir + " 失败!"); } } catch (Exception e) { e.printStackTrace(); } return flag; } //改变目录路径 public boolean changeWorkingDirectory(String directory) { boolean flag = true; try { flag = client.changeWorkingDirectory(directory); if (flag) { logger.debug("进入文件夹" + directory + " 成功!"); } else { logger.debug("进入文件夹" + directory + " 失败!"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; }

    代码保存有道云

    转载请注明原文地址: https://ju.6miu.com/read-21682.html

    最新回复(0)