【问题标题】:InputStream return null输入流返回空
【发布时间】:2012-06-12 09:27:04
【问题描述】:

我正在尝试通过 ftp 下载文件,但 retrieveFileStream 返回 null,我检查了 getReplyString 并返回 200,这是我的代码:

File file = new File(this.config.getDestDirectory() + File.separator + fileName);
String t = this.ftp.getReplyString();
InputStream in = this.ftp.retrieveFileStream(fileName);
FileOutputStream fos = new FileOutputStream(file);
StreamUtils.copy(in, fos);
in.close();
fos.close();

有什么建议吗?

非常感谢。

【问题讨论】:

  • 您的 InputStream 查看的是 fileName,而不是 file。这是故意的吗?
  • 什么是“ftp”,它从何而来?
  • 感谢您的回答,是的,是有意的,根据 API,retrieveFileStream 的参数是远程文件的名称,在我的代码文件中是 out 目录: FileOutputStream fos = new FileOutputStream(file) ;
  • ftp 是 FTPClient,我也检查了 ftp.isconected 并返回 true。
  • 我猜你正在使用Apache Commons FTPClient ?

标签: java ftp


【解决方案1】:

试试这种方式。它是我代码库中的一个示例,我使用了开源 Apache commons-net-ftp-2.0。

public void goforIt()
{
    FTPClient con = null;

    try
    {
        con = new FTPClient();
        con.connect("10.0.0.1");     // Dummy address

        if (con.login("Administrator", "KUjWbk361wobbyl"))
        {
            con.enterLocalPassiveMode(); // important!
            con.setFileType(FTP.BINARY_FILE_TYPE);
            String data = "/sdcard/2prerakm4a.m4a";

            OutputStream out = new FileOutputStream(new File(data));
            boolean result = con.retrieveFile("prerakm4a.m4a", out);
            out.close();
            if (result) Log.v("download result", "succeeded");
            con.logout();
            con.disconnect();
        }
    }
    catch (Exception e)
    {
        Log.v("download result","failed");
        e.printStackTrace();
    }
}

【讨论】:

    【解决方案2】:

    阿法伊克。您假设通过调用 completePendingCommand() 并验证传输确实成功来完成文件传输。即你需要在fos.clos()下面添加调用函数。

    fos.close(); client.completePendingCommand()

    应该这样做! 您也可以考虑一下,根据 FTPClient.retrieveFileStream() 的 API,该方法在无法打开数据连接时返回 null,在这种情况下您应该检查回复代码(例如 getReplyCode()、getReplyString()、getReplyStrings( )) 看看它失败的原因。

    【讨论】:

      【解决方案3】:

      如果您已经验证了上述所有答案但仍有问题,只需检查源下的上述设置。如果您有 Excluded:** 那么所有文件都将不可用,如果您只是从 Edit 选项中删除该 ** 您的代码应该可以工作。我有

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 投反对票,因为它是仅链接的答案,并且链接现在已失效。 X(
        • 我可以从源代码中找到,“如果在连接的建立和初始化期间的任何时候报告 FTP 协议错误,则返回 null”。见 org.apache.commons.net.ftp.FTPClient#_openDataConnection_(String, String)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        • 2015-04-18
        • 1970-01-01
        • 2017-11-26
        相关资源
        最近更新 更多