FTPClient从ftp上读取文件夹能读出来,但是读文件读不出来

时间:2022-01-10 04:24:13
代码如下:



String remoteHost = snDataSynchronizationParam.get("RemoteHost");// FTP地址
String port = snDataSynchronizationParam.get("RemotePort");// 端口
String remotePath = snDataSynchronizationParam.get("RemotePath");// FTP文件目录
String userName = snDataSynchronizationParam.get("User");// 用户名
String password = snDataSynchronizationParam.get("Pwd");// 密码


FTPClient ftpClient = new FTPClient();
String realPath=null;
InputStream is = null;
BufferedInputStream bfis = null;


ftpClient.connect(remoteHost, Integer.valueOf(port));
boolean isConnectSuccess = ftpClient.login(userName,password);
logger.debug("-----------isConnectSuccess:"+ isConnectSuccess);
if(isConnectSuccess){
//设置文件 2进制传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
//设置文件流传输
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
//设置缓冲
ftpClient.setBufferSize(1024);
//设置文件编码
ftpClient.setControlEncoding("GBK");
//SYST_NT ---对应windows系统
FTPClientConfig ftpClientConfig = new FTPClientConfig(FTPClientConfig.SYST_NT);
//系统编码为中文
ftpClientConfig.setServerLanguageCode("zh");
fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1");
logger.debug("-----------path1:"+ ftpClient.changeWorkingDirectory(remotePath));
FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);
logger.debug("-----------ftpFiles.length:"+ftpFiles.length);



我用ftpClient.changeWorkingDirectory(remotePath)打印出来的是true.也就证明我能取到路径。但是我再用ftpFiles.length取值的时候就是0了,也就是说没有取出文件。

ftp上确认有此文件和文件夹。但是取不出文件的原因是什么吗?

之前这段代码我测试的时候是好使的,可以读出文件。最近再运行就找不到文件,谁知道原因,请告诉下啊!谢谢!

11 个解决方案

#1


国庆放假之前老板让搞定,大家帮忙!

#2


windows系统不是应该用“\”吗?

#3


RemotePath打出来看看

#4


引用 3 楼 fudongrifdr 的回复:
RemotePath打出来看看



我把RemotePath在logger.debug("-----------path1:"+ ftpClient.changeWorkingDirectory(remotePath));写死以后,返回的是ture.
在FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);里写死以后再输出logger.debug("-----------ftpFiles.length:"+ftpFiles.length);打印出来的是0.

#5


引用 2 楼 rainbowsix 的回复:
windows系统不是应该用“\”吗?


曾经试过在程序里用\\但是ftpFiles.length结果一样还是0.

#6


没解决吗????

#7


你先用纯英文的文件名试试。
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?

#8


帖子好久了,不过现在我遇到和你一样的问题。

#9


FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。 FTPClient从ftp上读取文件夹能读出来,但是读文件读不出来

#10


进入目录你要判断是否成功才行,返回是boolean类型

#11


挖一下坟,listFiles不行,listNames可以的话,是服务器日期格式问题
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法

#1


国庆放假之前老板让搞定,大家帮忙!

#2


windows系统不是应该用“\”吗?

#3


RemotePath打出来看看

#4


引用 3 楼 fudongrifdr 的回复:
RemotePath打出来看看



我把RemotePath在logger.debug("-----------path1:"+ ftpClient.changeWorkingDirectory(remotePath));写死以后,返回的是ture.
在FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);里写死以后再输出logger.debug("-----------ftpFiles.length:"+ftpFiles.length);打印出来的是0.

#5


引用 2 楼 rainbowsix 的回复:
windows系统不是应该用“\”吗?


曾经试过在程序里用\\但是ftpFiles.length结果一样还是0.

#6


没解决吗????

#7


你先用纯英文的文件名试试。
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?

#8


帖子好久了,不过现在我遇到和你一样的问题。

#9


FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。 FTPClient从ftp上读取文件夹能读出来,但是读文件读不出来

#10


进入目录你要判断是否成功才行,返回是boolean类型

#11


挖一下坟,listFiles不行,listNames可以的话,是服务器日期格式问题
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法