2 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
changeWorkingDirectory()返回一個(gè)布爾值來指示成功或失敗,但它在失敗時(shí)隱藏了失敗的原因。如果查看源代碼:
public boolean changeWorkingDirectory(String pathname) throws IOException
{
return FTPReply.isPositiveCompletion(cwd(pathname));
}
它只是包裝對(duì)cwd.
現(xiàn)在如果你想要失敗的原因,你可以這樣寫你的函數(shù):
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貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
我今天遇到了同樣的問題:
循環(huán)client.retrieveFileStream()
一次打印正確的工作目錄,但第二次client.printWorkingDirectory()
只打印null
。
在我的例子中,我只是將文件下載類型從 更改client.retrieveFile()
為client.retrieveFileStream()
,這需要client.completePendingCommand()
在之后調(diào)用。文件說:
如果不這樣做,后續(xù)命令可能會(huì)出現(xiàn)意外行為。
更改您發(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
}
}
但是現(xiàn)在我想循環(huán)使用上面的代碼并上傳多個(gè)文件。
我知道這個(gè)問題已經(jīng)回答了,所以這是給所有發(fā)現(xiàn)它的人的:
如果你想上傳/下載多個(gè)文件(如果所有文件都應(yīng)該進(jìn)入/在同一個(gè)文件夾中?。┠銘?yīng)該只在一開始就改變工作目錄,因?yàn)椋?/p>
一旦您登錄到服務(wù)器,它會(huì)將工作目錄設(shè)置為根目錄(例如\
)。如果您隨后遍歷文件并嘗試每次都更改目錄,則會(huì)發(fā)生這種情況:
第一次循環(huán)迭代:它將切換到您想要的目錄,例如
\subdir
.第二次循環(huán)迭代:當(dāng)前目錄仍然是
\subdir
,因此它會(huì)嘗試切換到\subdir\subdir
,它可能存在也可能不存在。第三次循環(huán)迭代:當(dāng)前目錄是
\subdir\subdir
,它會(huì)嘗試切換到\subdir\subdir\subdir
.
一旦您注銷并再次登錄,工作目錄將\
再次成為根目錄(例如 )。
添加回答
舉報(bào)