2015-01-19 2 views
0

У меня есть несколько файлов на месте SFTP какJSch ChannelSftp.ls - узоры матча проходят в Java

xyz_20140101.csv.gz 
xyz_2014_01_01.csv.gz 
xyz_20140202.csv.gz 
xyz_2014_02_02.csv.gz 

через мой Java программы я хочу, чтобы получить список файлов только в формате xyz_YYYYMMDD.csv.gz, какие должен быть мой шаблон соответствия для передачи в команде ChannelSftp.ls.

Я передаю

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

ChannelSftp.ls(pattern); 

Что должно быть моим шаблон передать в команде LS?

+0

Пожалуйста, вы можете сказать моему по коду пример/образец –

ответ

2

ChannelSftp.ls принимает в качестве аргумента пути: http://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#ls(java.lang.String)

путь может содержать Глобы шаблоны символов (* и?), Но при этом вы не в состоянии проверить, что дата имеет цифры в нем.

так просто указать путь и применить регулярное выражение после

 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 
      } 

     } 

в случае, если вам не нужно, чтобы проверить, что дата отформатирована цифр вы можете просто использовать следующий шаблон и ChannelSftp.ls

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

, но это также будет соответствовать что-то вроде: xyz_2014_aaa.csv.gz

+0

Не могу я пройти регулярное выражение каким-либо образом в самой команде LS –

+0

я не могу найти какой-либо метод в API, который принимает регулярное выражение; но я не вижу никаких неудобств, так как вы не загружаете файлы, просто беру имена – user1121883

+0

Спасибо, что вы ответили на мою проблему, я думал так же, но просто скажите, как я могу создать регулярное выражение для файлов. –

0

ChannelSftp.ls принимает путь и шаблон в его path аргумент:

Параметры:

path - шаблон относительно текущего удаленного каталога. Шаблон может содержать шаблоны шаблонов шаблонов (* или ?) в последнем компоненте (т. Е. После последнего /).

Вы должны указать путь к каталогу аргументу; и измените шаблон, чтобы он соответствовал только тем файлам, которые вам нужны. Образец, который вы используете, действительно соответствует любому файлу в вашем списке, а не только файлам, которые вы хотите.

Вы можете использовать xyz_????????.csv.gz, чтобы явно потребовать, чтобы переменная часть имела 8 символов.

path_and_pattern = "/path/xyz_????????.csv.gz"; 

files = channel.ls(path_and_pattern); 
Смежные вопросы