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

Spring集成-逐行读取远程文件

商茂勋
2023-03-14

我正在尝试使用spring集成逐行读取远程文件。使用这里找到的spring文档,我已经设置了我的项目来轮询文件,并在找到文件时通过sftp传输它。我一直在思考如何一行一行地读取文件内容。

这是我的入站通道适配器设置,当前用于拉入文件。

<int-sftp:inbound-channel-adapter id="sftpAdapterAutoCreate"
        session-factory="sftpSessionFactory"
        channel="receiveChannel"
        filename-pattern="*.txt"
        remote-directory="/home/springftp"
        preserve-timestamp="true"
        local-directory="file:C:\sprintftp"
        auto-create-local-directory="true"
        temporary-file-suffix=".writing"
        delete-remote-files="false">
    <int:poller fixed-rate="1000" max-messages-per-poll="1"/>
</int-sftp:inbound-channel-adapter>

<int:channel id="receiveChannel"> 
    <int:queue/> 
</int:channel> 

编辑:为了澄清,我想一次从远程文件中检索一行,然后处理该行的内容,然后检索下一行。类似于为本地文件创建java.io.inputstream并逐行读取。

非常感谢您的帮助。非常感谢。

共有1个答案

梁丘弘
2023-03-14

您可以使用

更新

我想一次从远程文件中检索一行,然后处理该行的内容,然后检索下一行。类似于为本地文件创建java.io.inputstream并逐行读取。

很遗憾,我们没有为此提供高级组件,但您可以尝试使用RemoteFileTemplate的功能:

RemoteFileTemplate<FTPFile> template = new RemoteFileTemplate<FTPFile>(this.ftpSessionFactory);
template.setFileNameExpression(new SpelExpressionParser().parseExpression("payload"));
template.setBeanFactory(mock(BeanFactory.class));
template.afterPropertiesSet();
final ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
template.get(new GenericMessage<String>("ftpSource/ftpSource1.txt"), new InputStreamCallback() {

    @Override
    public void doWithInputStream(InputStream stream) throws IOException {
        FileCopyUtils.copy(stream, baos1);
    }
});

您可以将此代码连接到一些POJO服务,并将最后一个连接到

 类似资料:
  • 我想把文件从远程服务器拉到我的本地服务器。我正在使用Spring Integration SFTP来拉文件。我有以下配置: 我不想在成功拉取后从remotedir中删除文件。这里发生的事情是每30秒,从remotedir的文件就会被拉到我的本地文件。我希望spring batch程序在第一次之后停止,不要再次拉出相同的文件。我怎样才能做到这一点?

  • 我正在努力阅读附加的TXT文件,以csv形式显示从文件中读取的每个字段,我做了一个接近我想要的代码,但我没有前进。 TXT文件格式: 我的代码在我想要的位置读取第一行,但下面的行我不能,更不用说重复文件中包含的下一个工资单的读数了。 目前的输出是这样的: 出口应该是怎样的 逐行读取和捕获数据,我必须完成一个工资单,它将在输出中形成一行,第二个工资单将在输出中形成第二行,因此,直到txt文件结束,此

  • 我正在试着阅读我的文件的每一行,其中包含一个用户名列表,并用它创建一个登录系统。我正在尝试实现一个基本的登录系统,它的用户名存储在.txt文件中,但我的代码不工作,我不知道为什么。我认为问题出在检查用户名的循环中。 这是我的代码,但它不起作用,只是打印总是失败: 有什么想法吗?

  • 我们需要解析大量传入文件(到一个目录中),并对其进行处理,然后将结果放入每个文件的AWS动画中。 文件的频率为每天60000次,文件每15秒到达一次。每个文件可能包含大约1000个条目。 > spring集成能否处理此负载? 处理此类卷会有任何问题吗? 当文件进入入站通道适配器时,我们可以为每个文件执行服务激活器吗? 我认为我们需要在poller的频道上使用任务执行器?有什么例子吗? 任务执行者是

  • 问题内容: 我在Go中找不到功能。我可以弄清楚如何快速编写一个,但是我只是想知道我是否在这里忽略了一些东西。如何逐行读取文件? 问题答案: _注意: 可接受的答案在早期的Go版本中是正确的。 包中有ReadLine函数。 请注意,如果该行不适合读取缓冲区,则该函数将返回不完整的行。如果要始终通过单次调用函数来读取程序中的整行,则需要将该函数封装到自己的函数中,该函数在for循环中进行调用。 之所以

  • 问题内容: 如何使用fseek逐行读取文件? 代码可能会有所帮助。必须是跨平台和纯PHP。 提前谢谢了 问题答案: 问题是使用fseek进行询问,因此只能假定性能是一个问题,而file()不是解决方案。这是使用fseek的一种简单方法: 我的file.txt 和代码: 输出: 您不必像我一样附加到$ lines数组,如果这是脚本的目的,则可以立即打印输出。如果要限制行数,也很容易引入计数器。