Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java printWorkingDirectory()提供空值_Java_Ftp Client - Fatal编程技术网

Java printWorkingDirectory()提供空值

Java printWorkingDirectory()提供空值,java,ftp-client,Java,Ftp Client,我在下面写了一段将Excel记录插入db表的代码。Excel文件位于ftp服务器上。 基本上,我正在更改目录第一个abd RETRIVIG文件流 readExcel(String test, String filename) { client.changeWorkingDirectory("/"+test); is = client.retrieveFileStream(filename"); //do the processing } 上面的代码只运行了一次。但现在

我在下面写了一段将Excel记录插入db表的代码。Excel文件位于ftp服务器上。 基本上,我正在更改目录第一个abd RETRIVIG文件流

readExcel(String test, String filename) {
    client.changeWorkingDirectory("/"+test);
    is =  client.retrieveFileStream(filename");
    //do the processing
}
上面的代码只运行了一次。但现在我想在循环中使用上述代码并上传多个文件。我这样做了,发现只有第一个文件得到了正确处理,第二个文件就卡在
client.retrieveFileStream()方法的上方。
在我对循环中的第一个文件使用
printWorkingDirectory()
方法前后
changeWorkingDirectory()
之后,它在前后给出了正确的目录。但这是第二次在循环中,它同时给出null,代码在此之前被卡住<代码>检索文件流()


据我所知,这个问题是因为
changeWorkingDirectory()
被多次调用

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

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

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

然后看看你收到的代码的含义。

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

使用
client.retrieveFileStream()
循环一次打印正确的工作目录,但第二次使用
client.printWorkingDirectory()
仅打印
null

在我的例子中,我刚刚将文件下载的类型从
client.retrieveFile()
更改为
client.retrieveFileStream()
,这要求以后调用
client.completePendingCommand()
。文件说:

如果未执行此操作,后续命令可能会意外执行

更改您发布的代码时,将显示如下:

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

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

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

使用
client.retrieveFileStream()
循环一次打印正确的工作目录,但第二次使用
client.printWorkingDirectory()
仅打印
null

在我的例子中,我刚刚将文件下载的类型从
client.retrieveFile()
更改为
client.retrieveFileStream()
,这要求以后调用
client.completePendingCommand()
。文件说:

如果未执行此操作,后续命令可能会意外执行

更改您发布的代码时,将显示如下:

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

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

什么是客户端?如何调用此方法?
客户端
似乎是
apache.commons.net
FTPClient
…我说得对吗?是的…非常抱歉,我没有提供足够的信息。该客户端正在进行ftp连接。客户端定义为全局变量,并且在调用此方法之前已设置。客户端是什么?如何调用此方法?
客户端
似乎是
apache.commons.net
FTPClient
…我说得对吗?是的…非常抱歉,我没有提供足够的信息。该客户端正在进行ftp连接。客户端被定义为全局变量,并且在调用此方法之前已设置。我应该在changedirectory之前调用cwd方法还是在changedirectory方法之后调用cwd方法。第一次FTp回复是250-请求的文件操作可以。第二次循环显示257-路径名crea