gpt4 book ai didi

sftp - 使用JSch ChannelSftp:如何读取具有动态名称的多个文件?

转载 作者:行者123 更新时间:2023-12-03 11:46:35 25 4
gpt4 key购买 nike

我必须从SFTP服务器读取一堆带有动态文件名的.CSV文件。这些文件每15分钟生成一次。

我正在使用JSch的ChannelSftp,但是没有方法可以提供确切的文件名。我只看到.ls()方法。这给出了一个 vector

[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]

有没有简单的方法来读取目录中的所有文件并将它们复制到另一个位置?

此代码适用于复制单个文件:
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");

最佳答案

ls 方法是您需要的方法。它返回LsEntry对象的 vector ,您可以询问每个对象的名称。

因此,在channelSftp.cd(SFTPWORKINGDIR);之后,您可以执行以下操作:

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

(假设 destinationPath是以 /(或Windows中的 \)结尾的本地目录名称。)

当然,如果您不想在15分钟后再次下载相同的文件,则可能需要一个本地文件列表,以进行比较(使用HashSet或类似文件),或者从服务器中删除它们。

关于sftp - 使用JSch ChannelSftp:如何读取具有动态名称的多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com