从各种子目录递归地从FTP服务器下载文件

时间:2016-10-28 06:34:09

标签: java ftp spring-integration outbound

我在XML文件中配置了bean,入站通道适配器带有OUTBOUND GATEWAY。我在java类中使用@serviceactivator来调用channel.But只获取根文件夹中的文件无法从子目录中获取文件。

我的XML文件:

<int:inbound-channel-adapter channel="inbound1" expression="'/'">
 <int:poller fixed-delay="3000"/>
</int:inbound-channel-adapter>

<int-ftp:outbound-gateway id="gatewayGet"
        session-factory="ftpClientFactory"
        request-channel="inbound1"
        local-directory="C:/Users/pprakash/Desktop/DataFiles/actual"
        auto-startup="true"
        command="mget"
        command-options="-R"
        filename-pattern="*.csv"
        expression="'actual/*/*'"
        reply-channel="outbound"/>

<int:channel id="outbound">
<int:interceptors>
    <int:wire-tap channel="logger"/>
</int:interceptors>
</int:channel>
<int:logging-channel-adapter id="logger" log-full-message="true" />

'<bean id="ftpClientFactory"
                  class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
            <property name="host" value="192.168.79.1"/>
            <property name="port" value="21"/>
            <property name="username" value="*****"/>
            <property name="password" value="*****"/>
            <property name="bufferSize" value="100000"/>
</bean>'

我的java代码如下: -

 static int index=0;
@ServiceActivator(inputChannel = "inbound1")
public void foo1(File file) throws InterruptedException {
     logger.debug("Inbound msg to  gateway :[ "+(index++)+"]" +    file.getAbsolutePath());
}

@ServiceActivator(inputChannel = "outbound")
public void foo2(List<File> file) throws InterruptedException {
    System.out.println("outbound gateway");
   logger.debug("File Received  :[ "+(index++)+"]" + file.size());

}

1 个答案:

答案 0 :(得分:0)

filename-pattern="*.csv"

除非您的子目录也匹配该模式,否则不会扫描它们。

请参阅the documentation

  

例如,filename-regex="(subDir|.*1.txt)"将检索远程目录中的所有以1.txt结尾的文件和子目录subDir如果过滤了子目录,则不会执行该子目录的其他遍历。

(我的重点)。

因此,您的模式需要遍历树中的子目录。