当前位置: 首页 > 知识库问答 >
问题:

Apache Commons FTPClient无法检索某些文件

丌官绍元
2023-03-14

我正在使用Apache Commons FTPClient从FTP服务器获取文件。以下是设置:

 ftpClient.setDefaultPort(port);
            ftpClient.connect(server);
            ftpClient.login(user, password);
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.changeWorkingDirectory(path);

这是传输代码:

final FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
                    final boolean result = ftpClient.retrieveFile(dirToList + aFile.getName(), fileOutputStream);
                    Log.i(TAG, "[" + (result ? "+" : "-") + "]");

我在日志中看到:

I/SyncService( 4412): /Users/user1/Downloads/FtpSync/.idea/copyrightprofiles_settings.xml
I/SyncService( 4412): [-]
<...>
I/SyncService( 4412): /Users/user1/Downloads/FtpSync/footer.php
I/SyncService( 4412): [+]

所有php文件都已同步,所有xml文件都无法同步。FTP服务器在我的本地笔记本上(Mac OS X默认FTP服务器,tnftpd 20100324 GSSAPI)

为什么它不工作?

共有3个答案

融烨磊
2023-03-14

使用此代码下载文件。

public boolean ftpDownload(String srcFilePath, String desFilePath)
    {
        boolean status = false;
        try {
            FileOutputStream desFileStream = new FileOutputStream(desFilePath);; //desfilepath where the file is to be stored
            status = mFTPClient.retrieveFile(srcFilePath, desFileStream);

            desFileStream.close();

            return status;
        } catch (Exception e) {
            Log.d(TAG, "download failed");
        }

        return status;
    } 
西门威
2023-03-14

我在使用retrieveFile方法下载一些大文件时遇到了问题,在这种情况下,它会崩溃而不会引发异常。最后,我使用了retrieveFileStream方法,为我解决了这个问题。

替换

status = mFTPClient.retrieveFile(srcFilePath, desFileStream);

具有

// import org.apache.commons.io.IOUtils;

InputStream inputStream = mFTPClient.retrieveFileStream(srcFilePath);
IOUtils.copy(inputStream, desFileStream);
outputStream.flush();
IOUtils.closeQuietly(desFileStream);
IOUtils.closeQuietly(inputStream);

//status = mFTPClient.completePendingCommand();
status = true;

completePendingCommand崩溃时没有为我抛出异常,因此它被注释掉了,但我认为应该在完成命令后调用它。

微生耘豪
2023-03-14

首先,您应该始终在retrieveFile方法之后关闭输出流。你试过更改FTP吗。{filetype}下载XML文件时(尽管不应该是这种情况)?

 类似资料:
  • 在我们的应用程序中,appium iOS无法检查一个自定义按钮。 有问题的按钮有一个Id。我们可以通过Xcode可访问性检查器检查它,但无法通过appium web检查器检查它。 此外,我们试图用从Xcode可访问性检查器获取的id单击该按钮,但它不起作用。Appium控制台搜索它,直到它超时。 如何做到这一点?因为这对我们来说是一个阻碍因素。有什么建议吗? XCode版本:9.2 MacOSx:

  • 我在片段中有一个回收器来显示firestore中集合中的文档,问题是,它只从文档中检索某些字段,看起来它忽略了模型类中的其他一些Setter字段,这是我得到的错误: W/Firestore:(0.6.6-dev)[zzko]:在com类中找不到sabado的setter/field。实例denilsondasilva。iasdmt。com。实例denilsondasilva。com。实例denil

  • 我目前正在创建一个基于此小提琴的动态下拉列表 除了我试图调用JSON文件之外,我一直在跟进。我的代码如下: ]; 范围metro可以工作,但是当连接到JSON文件时,其余的就不能工作了。我假设它会工作,因为它实际上是相同的结构。我做错了什么? [编辑] 正如你们中的一些人所回答的那样,在我进行上述操作之前,我最初尝试了这种http注入: 这不起作用,所以我试了另一种方法。所以我假设它与JSON赋值

  • 脚本: 超文本标记语言: 我试图获取的文本与帐单地址相同。我也尝试过使用getText(),但没有返回任何结果。

  • 如果Chrome能在我期望的时候打开文件,那就太好了。我会很感激你的帮助。

  • 首先,我使用Windows 7 64位,WAMP 32位和火鸟32位。 我试图使用PHP与火鸟或interbase,所以我取消注释以下行从我的php.ini文件: 然后,当我启动WAMP时,会出现以下错误: 我已经尝试过的: 有人知道我该怎么解决这个问题吗?谢谢