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
我把RemotePath在logger.debug("-----------path1:"+ ftpClient.changeWorkingDirectory(remotePath));写死以后,返回的是ture.
在FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);里写死以后再输出logger.debug("-----------ftpFiles.length:"+ftpFiles.length);打印出来的是0.
#5
曾经试过在程序里用\\但是ftpFiles.length结果一样还是0.
#6
没解决吗????
#7
你先用纯英文的文件名试试。
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?
#8
帖子好久了,不过现在我遇到和你一样的问题。
#9
FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。
#10
进入目录你要判断是否成功才行,返回是boolean类型
#11
挖一下坟,listFiles不行,listNames可以的话,是服务器日期格式问题
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法
#1
国庆放假之前老板让搞定,大家帮忙!
#2
windows系统不是应该用“\”吗?
#3
RemotePath打出来看看
#4
我把RemotePath在logger.debug("-----------path1:"+ ftpClient.changeWorkingDirectory(remotePath));写死以后,返回的是ture.
在FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);里写死以后再输出logger.debug("-----------ftpFiles.length:"+ftpFiles.length);打印出来的是0.
#5
曾经试过在程序里用\\但是ftpFiles.length结果一样还是0.
#6
没解决吗????
#7
你先用纯英文的文件名试试。
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?
你标题说读取文件夹可以,其实读取文件夹就是读文件夹包含的文件列表,看你这个好像不行嘛,那到底是什么功能可以?
#8
帖子好久了,不过现在我遇到和你一样的问题。
#9
FTPFile[] ftpFiles = ftpClient.listFiles( remotePath + "/" + fileName);
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。
这里不用加 remotePath,,直接用fileName 就可以了。
记得把分给我。
#10
进入目录你要判断是否成功才行,返回是boolean类型
#11
挖一下坟,listFiles不行,listNames可以的话,是服务器日期格式问题
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法
参考 http://blog.csdn.net/wangchsh2008/article/details/47101423
我正在研究 FTPClientConfig ,看有没有简单点的方法