当前位置: 代码迷 >> J2EE >> FTPClient 剔除中文文件夹下的文件
  详细解决方案

FTPClient 剔除中文文件夹下的文件

热度:605   发布时间:2016-04-19 22:17:10.0
FTPClient 删除中文文件夹下的文件
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);