2 回答
TA贡献1839条经验 获得超15个赞
changeWorkingDirectory()返回一个布尔值来指示成功或失败,但它在失败时隐藏了失败的原因。如果查看源代码:
public boolean changeWorkingDirectory(String pathname) throws IOException
{
return FTPReply.isPositiveCompletion(cwd(pathname));
}
它只是包装对cwd.
现在如果你想要失败的原因,你可以这样写你的函数:
readExcel(String test, String filename) {
int returnCode = client.cwd("/"+test);
if ( FTPReply.isPositiveCompletion( returnCode ) ) {
is = client.retrieveFileStream(filename");
//do the processing
}
else {
System.out.println("Cannot cd to " + filename + " errorcode="+returnCode);
}
}
然后只需查找您收到的代码的含义即可。
TA贡献1898条经验 获得超8个赞
我今天遇到了同样的问题:
循环client.retrieveFileStream()
一次打印正确的工作目录,但第二次client.printWorkingDirectory()
只打印null
。
在我的例子中,我只是将文件下载类型从 更改client.retrieveFile()
为client.retrieveFileStream()
,这需要client.completePendingCommand()
在之后调用。文件说:
如果不这样做,后续命令可能会出现意外行为。
更改您发布的代码,它看起来像这样:
readExcel(String test, String filename) {
client.changeWorkingDirectory("/"+test);
is = client.retrieveFileStream(filename");
//do the processing
if(client.completePendingCommand()) {
//File transfer successful
} else {
//File transfer failed
}
}
但是现在我想循环使用上面的代码并上传多个文件。
我知道这个问题已经回答了,所以这是给所有发现它的人的:
如果你想上传/下载多个文件(如果所有文件都应该进入/在同一个文件夹中!)你应该只在一开始就改变工作目录,因为:
一旦您登录到服务器,它会将工作目录设置为根目录(例如\
)。如果您随后遍历文件并尝试每次都更改目录,则会发生这种情况:
第一次循环迭代:它将切换到您想要的目录,例如
\subdir
.第二次循环迭代:当前目录仍然是
\subdir
,因此它会尝试切换到\subdir\subdir
,它可能存在也可能不存在。第三次循环迭代:当前目录是
\subdir\subdir
,它会尝试切换到\subdir\subdir\subdir
.
一旦您注销并再次登录,工作目录将\
再次成为根目录(例如 )。
添加回答
举报