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個贊
我今天遇到了同樣的問題:
循環(huán)client.retrieveFileStream()
一次打印正確的工作目錄,但第二次client.printWorkingDirectory()
只打印null
。
在我的例子中,我只是將文件下載類型從 更改client.retrieveFile()
為client.retrieveFileStream()
,這需要client.completePendingCommand()
在之后調用。文件說:
如果不這樣做,后續(xù)命令可能會出現意外行為。
更改您發(fā)布的代碼,它看起來像這樣:
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
}
}
但是現在我想循環(huán)使用上面的代碼并上傳多個文件。
我知道這個問題已經回答了,所以這是給所有發(fā)現它的人的:
如果你想上傳/下載多個文件(如果所有文件都應該進入/在同一個文件夾中?。┠銘撝辉谝婚_始就改變工作目錄,因為:
一旦您登錄到服務器,它會將工作目錄設置為根目錄(例如\
)。如果您隨后遍歷文件并嘗試每次都更改目錄,則會發(fā)生這種情況:
第一次循環(huán)迭代:它將切換到您想要的目錄,例如
\subdir
.第二次循環(huán)迭代:當前目錄仍然是
\subdir
,因此它會嘗試切換到\subdir\subdir
,它可能存在也可能不存在。第三次循環(huán)迭代:當前目錄是
\subdir\subdir
,它會嘗試切換到\subdir\subdir\subdir
.
一旦您注銷并再次登錄,工作目錄將\
再次成為根目錄(例如 )。
添加回答
舉報