如何实现自定义SftpSimplePatternFileListFilter?

时间:2016-02-10 14:26:26

标签: spring filter spring-integration sftp

我是Spring集成的新手。我正在尝试实现客户sftp过滤器列出SFTP服务器中的文件。我在构造函数中看到“看到空白的最终字段可能没有被初始化”。您可以建议我从sftp服务器获取文件名列表。

我不知道我的代码出了什么问题。

先谢谢

java代码

public class SFTPFileFilter extends SftpSimplePatternFileListFilter {






    public SFTPFileFilter(String pattern) {
        super(pattern);
        // TODO Auto-generated constructor stub
    }


    final static Logger logger = LoggerFactory.getLogger(SFTPFileFilter.class);

    private final Queue<File> seen;

    private final Set<File> seenSet = new HashSet<File>();

    private final Object monitor = new Object();

    public static int fileCount = 0;

    @Autowired
    private SourcePollingChannelAdapter sftpInbondAdapter;



     public List<File> filterFiles(File[] files)
    {
         List<File> accepted = new ArrayList<File>();
            for (File file : files) {
                System.out.println(file.getName());
                accepted.add(file);
            }
            return accepted;
    }


    public boolean accept(File file) {
        synchronized (this.monitor) {
            if (this.seenSet.contains(file)) {
                logger.info(file.getName()+" is already copied earlier");
                return false;
            }
            if (this.seen != null) {
                if (!this.seen.offer(file)) {
                    File removed = this.seen.poll();
                    this.seenSet.remove(removed);
                    this.seen.add(file);
                }
            }
            this.seenSet.add(file);
            return true;
        }
    }


}

1 个答案:

答案 0 :(得分:0)

 private final Queue<File> seen;

您没有在构造函数中初始化该字段。

你无法像那样扩展它;简单地覆盖这样的方法......

 public List<File> filterFiles(File[] files) {
        for (File file : files) {
            System.out.println("received:" + file.getName());
        }
        List<File> filtered = super.filterFiles(files);
        for (File file : flteredFiles) {
            System.out.println("after filter:" + file.getName());
        }
        return filteredFiles;
}