問題の説明:
org.apache.cmmons.net.ftp.ftpclientを使用して中国のディレクトリを作成し、中国のファイル名をアップロードします。中国のディレクトリとファイル名は「??」として表示されます。
理由:
FTPプロトコルでは、ファイル名はISO-8859-1として指定されているため、ディレクトリ名またはファイル名を転送する必要があります。
解決:
1.中国のディレクトリまたはファイル名をISO-8859-1コード文字に変換します。参照コード:
次のようにコードコードをコピーします。
文字列名= "ディレクトリ名またはファイル名";
name = new String(name.getBytes( "gbk")、 "ISO-8859-1");
2. Linux環境変数のコピーコードを次のように設定します。
lc_all = "zh_cn.gbk"をエクスポート
lang = "zh_cn.gbk"
例:
次のようにコードコードをコピーします。
public boolean uploadfile(ファイルファイル、文字列パス、文字列ファイル名)をthrows ioexception {
boolean result = false;
ftpclient ftpclient = new ftpclient();
試す {
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);
//ディレクトリを作成します
if(path!= null &&! ""。equals(path.trim())){{{
string [] pathes = path.split( "/");
for(string onepath:pather){
ifpath == null ||。
続く;
}
OnePath = new String(OnePath.GetBytes( "GBK")、 "ISO-8859-1");
if(!ftpclient.changeworkingdirectory(onepath)){
ftpclient.makedirectory(onepath);
ftpclient.changeworkingdirectory(onepath);
}
}
}
result = ftpclient.storefile(new String(filename.getBytes( "gbk")、 "ISO-8859-1")、new FileInputStream(file));
} catch(例外e){{
e.printstacktrace();
} ついに {
ftpclient.logout();
}
返品結果;
}