Descrição do problema:
Use org.apache.cmmon.net.ftp.ftpClient Para criar um diretório chinês e fazer upload do nome do arquivo chinês, o diretório chinês e o nome do arquivo são exibidos como "??".
razão:
No protocolo FTP, o nome do arquivo é especificado como ISO-8859-1; portanto, o nome do diretório ou o nome do arquivo precisa ser transferido.
Solução:
1. Vire o diretório chinês ou o nome do arquivo para caracteres codificados ISO-8859-1. Código de referência:
Copie o código do código da seguinte forma:
String name = "Nome do diretório ou nome do arquivo";
Nome = new String (name.getBytes ("GBK"), "ISO-8859-1");
2. Defina o código de cópia da variável de ambiente Linux da seguinte forma:
exportar lc_all = "zh_cn.gbk"
exportar lang = "zh_cn.gbk"
Exemplo:
Copie o código do código da seguinte forma:
Public boolean uploadfile (arquivo de arquivo, string path, string filename) lança ioexception {
Resultado booleano = false;
FtpClient ftpClient = new ftpClient ();
tentar {
ftpClient.Connect (confservice.getConfValue (Portalconfcontants.ftp_client_host)) ;;);
ftpclient.login (confservice.getconfvalue (Portalconfcontants.ftp_client_username), confervice, confservice
.getConfValue (Portalconfcontants.ftp_client_password));
ftpClient.SetFileType (ftpClient.binary_file_type);
// Faça diretório
if (path! = null &&! "". Equals (path.trim ())) {{
String [] Pathes = Path.split ("/");
para (String OnePath: Pather) {
ifPath == null || ".equals (OnePath.Trim ())) {) {
continuar;
}
OnePath = new String (OnePath.GetBytes ("GBK"), "ISO-8859-1");
if (! ftpClient.ChangeWorkingDirectory (OnePath)) {
ftpClient.Makedirectory (OnePath);
ftpClient.ChangeWorkingDirectory (OnePath);
}
}
}
Resultado = ftpclient.storefile (new String (filename.getbytes ("gbk"), "ISO-8859-1"), new FileInputStream (FILE));
} Catch (Exceção e) {{
E.PrintStackTrace ();
} Finalmente {
ftpClient.logout ();
}
Resultado de retorno;
}