org.apache.commons.net.ftp.FTPClient包中的ftpClient.listFiles()输出为0
问题介绍:
我用FTPClient方法访问异地搭建的win nt下的ftp服务器,ftpClient.listFiles()输出为0,ftpClient.listNames()为空,ftpClient.list()有值是150,无法获取到FTP服务器上某路径下的文件。
但是我手工登录(通过linux系统FTP对面的FTP服务器)FTP,相同的用户名、密码、路径是可以看到文件的,并且可以对该路径下的文件GET和PUT新文件。
具体的代码及日志是:
org.apache.commons.net.ftp.FTPClient ftpClient = new FTPClient(); FileOutputStream fos = null;
FileInputStream fis=null;
System.out.println("进入读取ftp...............");
try {
File file = new File(localStr);
if (!file.exists()) {
file.mkdirs();
} Calendar cCalendar = Calendar.getInstance();
long currTime = cCalendar.getTimeInMillis();
ftpClient.setDataTimeout(120000);
ftpClient.setBufferSize(204800);
System.out.println("Host-====="+Host);
ftpClient.setControlEncoding("gbk");
config = new FTPClientConfig(FTPClientConfig.SYST_NT);
config.setServerLanguageCode("zh");
ftpClient.configure(config);
ftpClient.connect(Host);
System.out.println(ftpClient.getReplyString());
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
this.mErrors.addOneError("连接未成功!");
return false;
}
if (!ftpClient.login(user, user)) {
this.mErrors.addOneError("未登录成功!");
return false;
}
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
System.out.println(ftpClient.getReplyString()); if(sign.equals("0")){
/*对远程文件进行分析*/
if (remoteStr.equals("")) {
System.out.println("请输入正确的文件名!");
return false;
} String currDir = "";
int i = remoteStr.lastIndexOf("/");
currDir = remoteStr.substring(0, i);
String Remotefile = remoteStr.substring(i + 1); System.out.println("CurrDir is :" + currDir);
System.out.println("FileName:" + Remotefile); if (!ftpClient.changeWorkingDirectory(currDir)) {
this.mErrors.addOneError("ftp服务器无此路径!");
return false;
} System.out.println(ftpClient.printWorkingDirectory());
System.out.println(ftpClient.getReplyString());
System.out.println("ftpClient.list()==="+ftpClient.list());
System.out.println("ftpClient.listNames()==="+ftpClient.listNames());
System.out.println("ftpClient.listFiles()==="+ftpClient.listFiles().length);
FTPFile ff[] = ftpClient.listFiles();
if (ff == null || ff.length == 0) {
System.out.println("该目录下无任何文件!");
} else {
for (int j = 0; j < ff.length; j++) {
System.out.println(ff[j].getName());
if(!(ff[j].getName().equalsIgnoreCase("."))&&!(ff[j].getName().equalsIgnoreCase(".."))
&& ff[j].getName().equalsIgnoreCase(Remotefile))
{
fos = new FileOutputStream(localStr + ff[j].getName());
System.out.println("是否有文件后缀:" +ff[j].getName());
ftpClient.retrieveFile(ff[j].getName(), fos);
}
}
}
对应的日志是:
进入读取ftp...............
Host-=====10.100.51.53
220 Microsoft FTP Service200 Type set to I.CurrDir is :/DUIZHANG/20120104
FileName:DAYCHECKSPDB9100201200104.xml
/DUIZHANG/20120104
257 "/DUIZHANG/20120104" is current directory.ftpClient.list()===150
ftpClient.listNames()===null
ftpClient.listFiles()===0
程序中用到的FTP地址、用户名、密码、路径都是正确的,但是就是ftpClient.listFiles()方法取不到文件,请高手解答。
在网上也看过其他帖子,比如:
1.将ftp服务器操作系统语言环境设为英文 FTP服务器操作环境是对方的,对方表示无法修改
2.修改ftp包的代码:将FTPTimestampParserImpl类进行扩展,使之支持中文
因为要修改org.apache.commons.net.ftp.parser.UnixFTPEntryParser类的parseFTPEntry方法
这个UnixFTPEntryParser是引入的CALSS文件,不知道该怎么修改
请高手指点。
问题介绍:
我用FTPClient方法访问异地搭建的win nt下的ftp服务器,ftpClient.listFiles()输出为0,ftpClient.listNames()为空,ftpClient.list()有值是150,无法获取到FTP服务器上某路径下的文件。
但是我手工登录(通过linux系统FTP对面的FTP服务器)FTP,相同的用户名、密码、路径是可以看到文件的,并且可以对该路径下的文件GET和PUT新文件。
具体的代码及日志是:
org.apache.commons.net.ftp.FTPClient ftpClient = new FTPClient(); FileOutputStream fos = null;
FileInputStream fis=null;
System.out.println("进入读取ftp...............");
try {
File file = new File(localStr);
if (!file.exists()) {
file.mkdirs();
} Calendar cCalendar = Calendar.getInstance();
long currTime = cCalendar.getTimeInMillis();
ftpClient.setDataTimeout(120000);
ftpClient.setBufferSize(204800);
System.out.println("Host-====="+Host);
ftpClient.setControlEncoding("gbk");
config = new FTPClientConfig(FTPClientConfig.SYST_NT);
config.setServerLanguageCode("zh");
ftpClient.configure(config);
ftpClient.connect(Host);
System.out.println(ftpClient.getReplyString());
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
this.mErrors.addOneError("连接未成功!");
return false;
}
if (!ftpClient.login(user, user)) {
this.mErrors.addOneError("未登录成功!");
return false;
}
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
System.out.println(ftpClient.getReplyString()); if(sign.equals("0")){
/*对远程文件进行分析*/
if (remoteStr.equals("")) {
System.out.println("请输入正确的文件名!");
return false;
} String currDir = "";
int i = remoteStr.lastIndexOf("/");
currDir = remoteStr.substring(0, i);
String Remotefile = remoteStr.substring(i + 1); System.out.println("CurrDir is :" + currDir);
System.out.println("FileName:" + Remotefile); if (!ftpClient.changeWorkingDirectory(currDir)) {
this.mErrors.addOneError("ftp服务器无此路径!");
return false;
} System.out.println(ftpClient.printWorkingDirectory());
System.out.println(ftpClient.getReplyString());
System.out.println("ftpClient.list()==="+ftpClient.list());
System.out.println("ftpClient.listNames()==="+ftpClient.listNames());
System.out.println("ftpClient.listFiles()==="+ftpClient.listFiles().length);
FTPFile ff[] = ftpClient.listFiles();
if (ff == null || ff.length == 0) {
System.out.println("该目录下无任何文件!");
} else {
for (int j = 0; j < ff.length; j++) {
System.out.println(ff[j].getName());
if(!(ff[j].getName().equalsIgnoreCase("."))&&!(ff[j].getName().equalsIgnoreCase(".."))
&& ff[j].getName().equalsIgnoreCase(Remotefile))
{
fos = new FileOutputStream(localStr + ff[j].getName());
System.out.println("是否有文件后缀:" +ff[j].getName());
ftpClient.retrieveFile(ff[j].getName(), fos);
}
}
}
对应的日志是:
进入读取ftp...............
Host-=====10.100.51.53
220 Microsoft FTP Service200 Type set to I.CurrDir is :/DUIZHANG/20120104
FileName:DAYCHECKSPDB9100201200104.xml
/DUIZHANG/20120104
257 "/DUIZHANG/20120104" is current directory.ftpClient.list()===150
ftpClient.listNames()===null
ftpClient.listFiles()===0
程序中用到的FTP地址、用户名、密码、路径都是正确的,但是就是ftpClient.listFiles()方法取不到文件,请高手解答。
在网上也看过其他帖子,比如:
1.将ftp服务器操作系统语言环境设为英文 FTP服务器操作环境是对方的,对方表示无法修改
2.修改ftp包的代码:将FTPTimestampParserImpl类进行扩展,使之支持中文
因为要修改org.apache.commons.net.ftp.parser.UnixFTPEntryParser类的parseFTPEntry方法
这个UnixFTPEntryParser是引入的CALSS文件,不知道该怎么修改
请高手指点。
进入读取ftp...............
Host-=====10.100.51.53
220 Microsoft FTP Service200 Type set to I.CurrDir is :/DUIZHANG/20120104
FileName:DAYCHECKSPDB9100201200104.xml
/DUIZHANG/20120104
257 "/DUIZHANG/20120104" is current directory.ftpClient.list()===150
ftpClient.listNames()===null
ftpClient.listFiles()===0
该目录下无任何文件!
150 Opening BINARY mode data connection.下载ftp成功