FTPClient 删除中文文件夹下的文件,如果中文文件夹在程序中写死,通过转换可以删除,如下:
String remoteDir="/aa/测试";
remoteDir=new String(remoteDir.getBytes(“UTF-8”), "iso-8859-1");
FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir); //得到ftp下 /aa/测试/下的文件。
但如果是文件夹从数据库读出的。则删除了。
String remoteDir="/aa/"+sFolder; //sFolder="测试";
remoteDir=new String(remoteDir.getBytes(“UTF-8”), "iso-8859-1");
FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir); //也能遍历文件夹下的文件就是删除不了,原因是中文文件夹变成 ???(乱码)
请问该如何 转换?
先谢过了。
------解决方案--------------------
ftp.connect(ip, port);
//下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
增加这个设置试试............
------解决方案--------------------
先弱弱的问下new String(remoteDir.getBytes(“UTF-8”), "iso-8859-1");是将UTF-8转换为ISO-8859-1吗?
如果是的话,个人观点:从程序中直接写汉字可以转而从数据库中取出来不可以转,说明从程序中直接写汉字,编码为UTF-8,而数据库中取出来的则不是UTF-8,所以会变乱码。
反之new String(remoteDir.getBytes(“UTF-8”), "iso-8859-1");是将iso-8859-1转为UTF-8也一样。
个人观点而已,没有测试。
------解决方案--------------------
package nc.ui.doc.doc_007;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import nc.itf.doc.DocDelegator;
import nc.vo.doc.doc_007.DirVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVO;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTP;
public class FtpTool {
private FTPClient ftp;
private String romateDir = "";
private String userName = "";
private String password = "";
private String host = "";
private String port = "21";
public FtpTool(String url) throws IOException {
//String url="ftp://user:password@ip:port/ftptest/psd";
int len = url.indexOf("//");
String strTemp = url.substring(len + 2);
len = strTemp.indexOf(":");
userName = strTemp.substring(0, len);
strTemp = strTemp.substring(len + 1);
len = strTemp.indexOf("@");
password = strTemp.substring(0, len);
strTemp = strTemp.substring(len + 1);
host = "";
len = strTemp.indexOf(":");
if (len < 0)//没有设置端口
{
port = "21";
len = strTemp.indexOf("/");
if (len > -1) {
host = strTemp.substring(0, len);
strTemp = strTemp.substring(len + 1);
} else {
strTemp = "";
}
} else {
host = strTemp.substring(0, len);
strTemp = strTemp.substring(len + 1);
len = strTemp.indexOf("/");
if (len > -1) {
port = strTemp.substring(0, len);
strTemp = strTemp.substring(len + 1);
} else {
port = "21";
strTemp = "";
}
}
romateDir = strTemp;
ftp = new FTPClient();
ftp.connect(host, FormatStringToInt(port));
}
public FtpTool(String host, int port) throws IOException {
ftp = new FTPClient();
ftp.connect(host, port);
}
public String login(String username, String password) throws IOException {
this.ftp.login(username, password);
return this.ftp.getReplyString();
}
public String login() throws IOException {
this.ftp.login(userName, password);
System.out.println("ftp用户: " + userName);
System.out.println("ftp密码: " + password);
if (!romateDir.equals(""))
System.out.println("cd " + romateDir);
ftp.changeWorkingDirectory(romateDir);