使用通配符或正则表达式访问资产文件夹的文件

时间:2013-02-01 15:02:55

标签: android android-assets

有没有办法按名称使用正则表达式将文件访问到 assets 文件夹中?

只选择了一个文件,但名称后缀明显为

类似的东西:

    aFD =SessionManager.getAppContext().getAssets().openFd("box*.png");

案例:

      /assets/box_1223.png

4 个答案:

答案 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
        }
    }

您可以使用REGEXcontains()

查看所有文件并仅使用您需要的内容

答案 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);