Descripción del problema:
Use org.apache.cmmons.net.ftp.ftpclient para crear un directorio chino y cargar el nombre del archivo chino, el directorio chino y el nombre del archivo se muestran como "??".
razón:
En el protocolo FTP, el nombre del archivo se especifica como ISO-8859-1, por lo que el nombre o el nombre del archivo del directorio deben transferirse.
Solución:
1. Gire el directorio chino o el nombre del archivo a los caracteres codificados ISO-8859-1. Código de referencia:
Copiar código del código de la siguiente manera:
Name de cadena = "Nombre o nombre del archivo del directorio";
name = new String (name.getBytes ("GBK"), "ISO-8859-1");
2. Establezca el código de código de copia variable de entorno Linux de la siguiente manera:
Exportar lc_all = "zh_cn.gbk"
Exportar lang = "zh_cn.gbk"
Ejemplo:
Copiar código del código de la siguiente manera:
Public boolean uploadFile (archivo de archivo, ruta de cadena, string filename) lanza ioexception {
Resultado booleano = falso;
FtpClient ftpClient = new ftpClient ();
intentar {
ftpclient.connect (confservice.getConfValue (portalconfcontants.ftp_client_host)) ;;);
ftpclient.login (confservice.getConfValue (portalconfcontants.ftp_client_username), confservice, confservice
.getConfValue (portalconfcontants.ftp_client_password));
ftpClient.setFileType (ftpclient.binary_file_type);
// hacer directorio
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 (archivo));
} Capt (excepción e) {{
E.PrintStackTrace ();
} Finalmente {
ftpClient.logout ();
}
Resultado de retorno;
}