Description du problème:
Utilisez org.apache.cmons.net.ftp.ftpclient pour créer un répertoire chinois et télécharger le nom de fichier chinois, le répertoire chinois et le nom de fichier sont affichés comme "??".
raison:
Dans le protocole FTP, le nom de fichier est spécifié en tant qu'ISO-8859-1, de sorte que le nom du répertoire ou le nom du fichier doit être transféré.
Solution:
1. Tournez le répertoire chinois ou le nom de fichier en caractères codés ISO-8859-1. Code de référence:
Copier le code du code comme suit:
Nom de chaîne = "Nom du répertoire ou nom de fichier";
name = new String (name.getBytes ("gbk"), "iso-8859-1");
2. Définissez le code de code de copie de la variable de l'environnement Linux comme suit:
export lc_all = "zh_cn.gbk"
export Lang = "Zh_Cn.gbk"
Exemple:
Copier le code du code comme suit:
Public boolean uploadfile (fichier de fichier, chemin de chaîne, nom de fichier de chaîne) lève ioException {
Résultat booléen = false;
FtpClient ftpClient = new ftpClient ();
essayer {
ftpClient.connect (confService.getConfValue (portalconfconnants.ftp_client_host)) ;;);
ftpclient.login (confService.getConfValue (PortalConfContants.ftp_client_username), ConfService, ConfService
.getConfValue (PortalConfContants.ftp_client_password));
ftpClient.setFileType (ftpclient.binary_file_type);
// Faire un répertoire
if (path! = null &&! "". equals (path.trim ())) {{
String [] pathes = path.split ("/");
pour (String OnePath: Pather) {
ifpath == null || ".equals (onepath.trim ())) {)
continuer;
}
OnePath = new String (onePath.getBytes ("gbk"), "iso-8859-1");
if (! ftpClient.changeworkingDirectory (onepath)) {
ftpclient.makedirectory (onepath);
ftpClient.changeworkingDirectory (onepath);
}
}
}
Résultat = ftpclient.storefile (new String (filename.getBytes ("gbk"), "iso-8859-1"), new FileInputStream (fichier));
} Catch (exception e) {{
e.printStackTrace ();
} Enfin {
ftpClient.logout ();
}
Résultat de retour;
}