猿问

printWorkingDirectory() 给出空值

我在下面编写了一段代码,用于将 Excel 记录插入到数据库表中。Excel 文件在 ftp 服务器上。基本上我首先改变目录abd retrievig 文件流。

readExcel(String test, String filename) {
    client.changeWorkingDirectory("/"+test);
    is =  client.retrieveFileStream(filename");
    //do the processing
}

上面的代码一次运行良好。但是现在我想循环使用上面的代码并上传多个文件。我这样做了,发现只有第一个文件得到了正确处理,第二个文件卡在了方法上方client.retrieveFileStream()。在我对循环中的第一个文件使用printWorkingDirectory()之前和之后的方法之后,它在之前和之后给出了正确的目录。changeWorkingDirectory()但是在循环中第二次它给出了 null 两次并且代码之前被卡住了。retrieveFileStream().

根据我的说法,问题是因为changeWorkingDirectory()被多次调用。


ITMISS
浏览 172回答 2
2回答

紫衣仙女

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);    }}然后只需查找您收到的代码的含义即可。

汪汪一只猫

我今天遇到了同样的问题:循环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.一旦您注销并再次登录,工作目录将\再次成为根目录(例如 )。
随时随地看视频慕课网APP

相关分类

Java
我要回答