有没有办法按名称使用正则表达式将文件访问到 assets 文件夹中?
只选择了一个文件,但名称后缀明显为
类似的东西:
aFD =SessionManager.getAppContext().getAssets().openFd("box*.png");
案例:
/assets/box_1223.png
答案 0 :(得分:2)
只需浏览清单......
for( String fileName : getAssets().list( "" ) ) {
if( fileName.endsWith( ".png" ) ) {
// here's your image
}
}
答案 1 :(得分:1)
您应该从资产文件夹
获取所有文件AssetManager amgr = getAssets();
String[] list = amgr.list("./");
for(String s : list){
Log.d("File:", s);
//check if filename is what you need
if (s.contains(what you need OR regex pattern)){
//do staff
}
}
您可以使用REGEX
或contains()
答案 2 :(得分:0)
我编写了这段代码,用于通过常规表达式从assets目录中获取文件路径名:
public String getFileNameFromAssetsByExpresion(String dirFrom, String nameExp) {
AssetManager am = SessionManager.getAppContext().getAssets();
String nameRetExp = null;
try {
for (String s : am.list(dirFrom)) {
// check if filename is what you need
if (Pattern.matches(nameExp, s)) { nameRetExp = s; break;}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return nameRetExp;
}
答案 3 :(得分:0)
我发现如果您在其中创建了目录,则需要递归遍历 assets 文件夹。
private void listAssets(String startPath, int level) {
try {
for(String s : getAssets().list(startPath)){
Log.d(TAG, "Level " + level + " asset found: " + s);
if (Pattern.matches(nameExp, s)) {
// TODO: Handle the asset matching the regex here!
}
// Recursively call ourself, one level deeper
String newPath = s;
if(startPath.length() > 0) {
newPath = startPath + "/" + s;
}
listAssets(newPath, level + 1);
}
} catch (IOException e) {
Log.d(TAG, "No assets for: \"" + startPath + "\"");
}
}
然后我通过传递一个空字符串来搜索顶级资产
listAssets("", 1);