FTPClient 切换changeWorkingDirectory(),只有第一次成功

时间:2022-05-13 04:11:29

int reply;
ftp.connect(server);
ftp.login(userName, userPassword);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
ftpClient.changeWorkingDirectory(path_1);
InputStream is_1 = ftpClient.retrieveFileStream(fileName_1);
System.out.println(is_1);

ftpClient.changeWorkingDirectory(path_2);
InputStream is_2 = ftpClient.retrieveFileStream(fileName_2);
System.out.println(is_2);

简单的通过 FTPClient 读取服务器上的文件,发现连续读取文件的时候,只有第一个文件changeWorkingDirectory能准确定位,并读取到文件。后面的都是NULL、
跟path和fileName无关,当我path_2和fileName_2跟path_1和fileName_1兑换位置,一样的效果,可以读出path_2的内容,path_1又不行了。
再网上查的,每次读取完毕之后is.close;以及ftp.competePendingCommand();或者ftp.changetoParentDirectory();都无效。
请各位老师帮忙。

6 个解决方案

#1


第二次change位置是基于第一次position的位置移动的,明白了吗?

#2


楼上说的对。

#3


那比如第一次的路径是dira/dirb/dirc/dird
那么第二次的change的时候怎么写?先../../../?再dirx/diry/dirz?

#4


有一个方法切换到根目录,接下来应该不难了吧

#5


public static void createDirs(FTPClient ftpClient, String remoteUpLoadPath) throws IOException {

//根据路径逐层判断目录是否存在,如果不存在则创建
//1.首先进入ftp的根目录
ftpClient.changeWorkingDirectory("/");
String[] dirs = remoteUpLoadPath.split("/");
for (String dir : dirs) {
//2.创建并进入不存在的目录
if (!ftpClient.changeWorkingDirectory(dir)) {
ftpClient.mkd(dir);
ftpClient.changeWorkingDirectory(dir);
System.out.println("进入目录成功:"+dir);
}
}
}

#6


我今天也遇到了这种问题,我是在A目录下载文件然后要切换回B目录下载,刚开始使用ftpClient.changeWorkingDirectory(B)不行,后来我在A中下载完毕后返回附件目录ftpClient.changeToParentDirectory();这样还是不行,后来研究了下返回2次ftpClient.changeToParentDirectory();调用2次,就OK了。(A和B都是平级的,上面还有一层目录)

#1


第二次change位置是基于第一次position的位置移动的,明白了吗?

#2


楼上说的对。

#3


那比如第一次的路径是dira/dirb/dirc/dird
那么第二次的change的时候怎么写?先../../../?再dirx/diry/dirz?

#4


有一个方法切换到根目录,接下来应该不难了吧

#5


public static void createDirs(FTPClient ftpClient, String remoteUpLoadPath) throws IOException {

//根据路径逐层判断目录是否存在,如果不存在则创建
//1.首先进入ftp的根目录
ftpClient.changeWorkingDirectory("/");
String[] dirs = remoteUpLoadPath.split("/");
for (String dir : dirs) {
//2.创建并进入不存在的目录
if (!ftpClient.changeWorkingDirectory(dir)) {
ftpClient.mkd(dir);
ftpClient.changeWorkingDirectory(dir);
System.out.println("进入目录成功:"+dir);
}
}
}

#6


我今天也遇到了这种问题,我是在A目录下载文件然后要切换回B目录下载,刚开始使用ftpClient.changeWorkingDirectory(B)不行,后来我在A中下载完毕后返回附件目录ftpClient.changeToParentDirectory();这样还是不行,后来研究了下返回2次ftpClient.changeToParentDirectory();调用2次,就OK了。(A和B都是平级的,上面还有一层目录)