2011-08-09 14 views
18

Bir SFTP sunucusundaki dinamik dosya adlarıyla bir grup .CSV dosyasını okumalıyım. Bu dosyalar her 15 dakikada bir oluşturulur.JSch Kanalını Kullanma ChannelSftp: Birden çok dosyayı dinamik adlarla nasıl okuyabilirim?

JSch'in ChannelSftp kullanıyorum, ancak tam dosya adlarını verecek bir yöntem yok. Sadece bir .ls() yöntemini görüyorum. Bu bir Vector örneğini verir.

[drwxr-xr-x 2 2019  2019   144 Aug 9 22:29 ., 
drwx------ 6 2019  2019   176 Aug 27 2009 .., 
-rw-r--r-- 1 2019  2019   121 Aug 9 21:03 data_task1_2011_TEST.csv, 
-rw-r--r-- 1 2019  2019   121 Aug 9 20:57 data_task1_20110809210007.csv] 

Dizindeki tüm dosyaları okumanın ve başka bir konuma kopyalamanın basit bir yolu var mı?

Bu kod tek bir dosya kopyalama çalışır:

JSch jsch = new JSch(); 
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT); 
session.setPassword(SFTPPASS); 
java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no"); 
session.setConfig(config); 
session.connect(); 
channel = session.openChannel("sftp"); 
channel.connect(); 
channelSftp = (ChannelSftp)channel; 
channelSftp.cd(SFTPWORKINGDIR); 
channelSftp.get("data_task1_20110809210007.csv","data_task1_20110809210007.csv"); 

cevap

44

ls yöntem ihtiyacınız biridir. Her biri adından sorabileceğiniz LsEntry nesnesinin bir vektörünü döndürür.

Yani, senin channelSftp.cd(SFTPWORKINGDIR); sonra aşağıdaki yapabilirdi: (. Windows'ta Bu destinationPath/ ile biten bir yerel dizin adıdır varsayar (veya \))

Vector<ChannelSftp.LsEntry> list = channelSftp.ls("*.cvs"); 
for(ChannelSftp.LsEntry entry : list) { 
    channelSftp.get(entry.getFilename(), destinationPath + entry.getFilename()); 
} 

Tabii

, Aynı dosyaları 15 dakikadan sonra tekrar indirmek istemiyorsanız, yerel dosyaların bir listesini görmek, bunları karşılaştırmak (bir HashSet veya benzeri) veya sunucudan silmek isteyebilirsiniz.

+0

Teşekkürler Paŭlo Ebermann'dan bağımsız olarak tüm csv dosyalarını alır. Bu hızlı. Yardımınıza minnettar olurum. – pingu

+2

[http://stackexchange.com/filters/19305/palos-filter] 'da göz attığım etiketlerde' jsch 'var ve sadece gönderdikten birkaç dakika sonra kontrol ettim. Yardım etmekten memnun oldum. –

+0

bu kod jsch 1.49 için hala geçerli mi? – ides

2

ls'un büyük/küçük harfe duyarlı olduğunu unutmayın. Bu yöntem,

İlgili konular