Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在sftpls命令中使用matchpattern_Java_Ftp_Jsch - Fatal编程技术网

Java 在sftpls命令中使用matchpattern

Java 在sftpls命令中使用matchpattern,java,ftp,jsch,Java,Ftp,Jsch,我的SFTP服务器上有两个文件 xyz07012014abc.txt xyz06072014abc.txt 我有一个Java程序,其匹配模式如下:month=“07”和year=“2014” 上面的匹配模式让我得到了这两个文件。但是,我只需要以下文件: xyz07012014abc.txt 如何修改匹配模式以获得正确的结果 编辑 我正在使用下面的java方法,并将上面的匹配模式提供给它 private void getFilesFromFTP(String sftpBase, String

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

xyz07012014abc.txt
xyz06072014abc.txt
我有一个Java程序,其匹配模式如下:month=“07”和year=“2014”

上面的匹配模式让我得到了这两个文件。但是,我只需要以下文件:

xyz07012014abc.txt
如何修改匹配模式以获得正确的结果

编辑

我正在使用下面的java方法,并将上面的匹配模式提供给它

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();
}
private void getFilesFromFTP(字符串sftpBase,字符串匹配模式)抛出JSchException,SftpException{
调试(“从FTP服务器下载奖励文件…”);
会话=空;
通道=空;
ChannelSftp ChannelSftp=null;
JSch JSch=新的JSch();
session=jsch.getSession(奖励用户,奖励服务器,22);
session.setPassword(奖励密码);
属性配置=新属性();
配置放置(“检查”、“否”);
session.setConfig(config);
session.connect();
通道=会话.openChannel(“sftp”);
channel.connect();
channelSftp=(channelSftp)信道;
channelSftp.cd(sftpBase);
向量列表=channelSftp.ls(匹配模式);
对于(ChannelSftp.LsEntry条目:列表){
channelSftp.get(entry.getFilename(),TEMP_DIRECTORY_PATH+entry.getFilename());
}
通道断开();
session.disconnect();
}

以下是指向Jsch JavaDoc的链接:

它说:

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
它要求您使用全局模式通配符。所以,我把我的通配符从

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

问题已经解决了


谢谢大家的帮助。

您的
匹配模式
不正确(首先
*
之前没有任何内容)。提供一些正确的例子来解释你的问题,让我们重现它。这看起来不像正则表达式。特别是,在正则表达式中,
*
匹配0个或多个上一个字符/组。您编写的模式(
“*07*2014*
)不应该与两个文件名都匹配。它确实与两个文件名都匹配。那么这不是您要问的正则表达式。似乎
*
是通配符,而不是量词。Pshemo:好的。我没有意识到这一点。请根据您的意愿编辑标记。
matchPattern = "*" + month + "*" + year + "*";
matchPattern = "*" + month + "??" + year + "*";