您的位置:首页 > 编程语言 > Java开发

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

2017-03-10 15:59 651 查看
找了很多资料。

参考这篇靠谱

要点:

/** 本地字符编码 */
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;
}


代码保存有道云
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: