Java 在sftpls命令中使用matchpattern
我的SFTP服务器上有两个文件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
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 + "*";