所以我在Java中使用AWS SDK,我创建了一个类来下载S3服务器中的存储桶/对象。
我现在需要的是创建类似通配符或模式的东西来附加一个名为(“reports”)的字符串。我唯一想到的就是创建一个模式匹配器变量,如下所示:
Pattern p = Pattern.compile("[a-zA-Z][0-9]");
Matcher m = p.matcher(prePattern);
ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix(m + "reports"));+
有人可以告诉我,如果有更好的解决方案,我正在尝试做什么,或者我是否做得恰到好处?
谢谢!
新代码:
String bucketName = "blabla";
String prePattern = "^[a-z0-9_-]{1,30}$";
String prefixPat = " -- Insert Pattern Here -- ";
ArrayList<String> objPrefix = new ArrayList();
Pattern p = Pattern.compile(prePattern);
Matcher m = p.matcher(prefixPat);
for(int i=0; i<= objPrefix.size(); i++)
{
objPrefix.add(m + "reports");
ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix(objPrefix.get(i)));
}
你们这些想法?真的很感激。谢谢!
答案 0 :(得分:1)
对AWS知之甚少,但代码的m + "reports"
部分正在调用m.toString
并将其与文字“报告”连接起来。 Matcher对象的toString通常没那么有用。
从这段代码:
Pattern p = Pattern.compile("[a-zA-Z][0-9]");
Matcher m = p.matcher("test");
System.out.println( m + "reports" );
我在OS X上得到了这个:
java.util.regex.Matcher[pattern=[a-zA-Z][0-9] region=0,4 lastmatch=]reports
可能不是您要传递给ObjectListing
的内容。
您需要将m +
替换为对您的代码更有意义的内容。