为了账号安全,请及时绑定邮箱和手机立即绑定

printWorkingDirectory() 给出空值

printWorkingDirectory() 给出空值

ITMISS 2023-05-17 16:59:54
我在下面编写了一段代码,用于将 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()被多次调用。
查看完整描述

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);

    }

}

然后只需查找您收到的代码的含义即可。


查看完整回答
反对 回复 2023-05-17
?
汪汪一只猫

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.

一旦您注销并再次登录,工作目录将\再次成为根目录(例如 )。


查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信