Problembeschreibung:
Verwenden Sie org.apache.cmmons.net.ftp.ftpclient, um ein chinesisches Verzeichnis zu erstellen und den chinesischen Dateinamen hochzuladen. Das chinesische Verzeichnis und der Dateiname werden als "??" angezeigt.
Grund:
Im FTP-Protokoll wird der Dateiname als ISO-8859-1 angegeben, sodass der Verzeichnisname oder der Dateiname übertragen werden muss.
Lösung:
1. Verwandeln Sie den chinesischen Verzeichnis oder den Dateinamen in ISO-8859-1 codierte Zeichen. Referenzcode:
Kopieren Sie den Code -Code wie folgt:
String name = "Verzeichnisname oder Dateiname";
name = new String (name.getBytes ("GBK"), "ISO-8859-1");
2. Setzen Sie den Code des Linux -Umgebungsvariablen -Kopiercodes wie folgt:
exportieren lc_all = "zh_cn.gbk"
Export Lang = "zh_cn.gbk"
Beispiel:
Kopieren Sie den Code -Code wie folgt:
Public boolean uploadfile (Dateidatei, String Pfad, String -Dateiname) löst IOException {aus
Boolescher Ergebnis = falsch;
Ftpclient ftpclient = new ftpclient ();
versuchen {
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.berary_file_type);
// Verzeichnis machen
if (path! = null &&! "". Equals (path.trim ()) {{{{{{{{{
String [] pathes = path.split ("/");
für (String onepath: pather) {
ifpath == null || ".Equals (Onepath.trim ()) {) {
weitermachen;
}
Onepath = new String (Onepath.getBytes ("GBK"), "ISO-8859-1");
if (! ftpclient.changeworkingDirectory (Onepath)) {
ftpclient.makedirectory (Onepath);
ftpclient.ChangeworkingDirectory (Onepath);
}
}
}
Result = ftpclient.storefile (neuer String (Dateiname.getBytes ("GBK"), "ISO-8859-1"), neuer FileInputStream (Datei));
} Catch (Ausnahme e) {{{{{
E. printstacktrace ();
} Endlich {
ftpclient.logout ();
}
Rückgabeergebnis;
}