首页 > 解决方案 > printWorkingDirectory() 给出 null

问题描述

我在下面编写了一段代码,将 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()被多次调用。

标签: javaftp-client

解决方案


我今天遇到了同样的问题:

循环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.

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


推荐阅读