java channelsftp,JSch ChannelSftp.ls - 在java中传递匹配模式

I have multiple files at an sftp location like

xyz_20140101.csv.gz

xyz_2014_01_01.csv.gz

xyz_20140202.csv.gz

xyz_2014_02_02.csv.gz

through my java program i want to get list of files only in format xyz_YYYYMMDD.csv.gz , what should be my match pattern to pass in ChannelSftp.ls command .

I am passing

pattern = xyz_*csv.gz , but it gives me all the files .

ChannelSftp.ls(pattern);

What should be my pattern to pass in ls command ?

解决方案

the path can contain glob pattern wildcards (* or ?) but with this you are not able to check that date has digits in it.

so just list the path and apply regex after

Vector ls = channelSftp.ls(path);

Pattern pattern = Pattern.compile("xyz_[0-9]{8}.csv.gz");

for (Object entry : ls) {

ChannelSftp.LsEntry e = (ChannelSftp.LsEntry) entry;

//match regex on e.getFilename()

Matcher m = pattern.matcher(e.getFilename());

if (m.matches()) {

//TODO you code

}

}

in case you don't need to check that date is formatted from digits you can just use following pattern and ChannelSftp.ls

pattern = xyz_????????.csv.gz

but this will also match something like: xyz_2014_aaa.csv.gz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值