在sftp ls命令中使用matchpattern

时间:2014-07-11 22:57:56

标签: java ftp jsch

我的SFTP服务器上有两个文件

xyz07012014abc.txt
xyz06072014abc.txt

我有一个具有matchpattern的Java程序,如下所示:month =“07”and year =“2014”

matchPattern = "*" + month + "*" + year + "*";

上面的matchpattern获取了两个文件。但是,我只想要关注文件:

xyz07012014abc.txt

如何修改matchpattern以获得正确的结果。

修改

我正在使用以下java方法并将matchpattern提供给它。

private void getFilesFromFTP(String sftpBase, String matchPattern) throws JSchException, SftpException{
    log.debug("Downloading reward files from FTP server...");
    Session session = null;
    Channel channel = null;
    ChannelSftp channelSftp = null;
    JSch jsch = new JSch();
    session = jsch.getSession(REWARDS_SFTP_USER, REWARDS_SFTP_SERVER, 22);
    session.setPassword(REWARDS_SFTP_PASSWORD);
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.connect();

    channel = session.openChannel("sftp");
    channel.connect();
    channelSftp = (ChannelSftp) channel;
    channelSftp.cd(sftpBase);

    Vector<ChannelSftp.LsEntry> list = channelSftp.ls(matchPattern);
    for (ChannelSftp.LsEntry entry : list) {
        channelSftp.get(entry.getFilename(), TEMP_DIRECTORY_PATH + entry.getFilename());
    }

    channel.disconnect();
    session.disconnect();
}

1 个答案:

答案 0 :(得分:0)

以下链接到Jsch JavaDoc:

http://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/ChannelSftp.html#ls(java.lang.String)

它说:

ls

public Vector ls(String path)
          throws SftpException
lists the contents of a remote directory.
Parameters:
path - a pattern relative to the current remote directory. The pattern can contain glob pattern wildcards (* or ?) in the last component (i.e. after the last /).
Returns:
a vector of ChannelSftp.LsEntry objects.
Throws:
SftpException

它要求您使用glob模式通配符。所以,我改变了我的通配符

matchPattern = "*" + month + "*" + year + "*";

matchPattern = "*" + month + "??" + year + "*";

问题已解决。

感谢大家的帮助。