日期:2014-05-18  浏览次数:20855 次

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&nb