我的应用程序有一个资产目录,我在其中转储了一堆我需要在运行时加载的文本文件.
我有一个目录充满了特定类型的资产(即"assets/subdir"),我想加载这个目录中的所有文件,一次一个.
我有这样的代码:
AssetManager assetMgr = getAssets();
String[] assetsIWant = assetMgr.list("subdir");
for(String asset: assetsIWant) {
doAssetyThing(asset);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了大量不同版本的参数到assetMgr.list()并且没有到达任何地方.
如果我使用"/",我会返回一个包含"assets"目录的列表,以及一些随机的其他项目(例如META_INF).如果我传递任何其他字符串(如"assets"或"assets /"或"/ assets"或"/ assets /"或"mysubdir"或"/ mysubdir"或"assets/mysubdir"或...)那么我得到回一个空数组.
遗憾的是,文件相当不连贯.
有人知道list()参数的正确公式是什么吗?
小智 33
传递一个空字符串似乎对我有用.当我执行以下操作时,我得到资产目录中的文件列表:
AssetManager aMan = appContext.getAssets();
String[] filelist = aMan.list("");
Run Code Online (Sandbox Code Playgroud)
Dav*_*-mu 27
我使用以下代码列出assets/myFolder /中的文件名:
String[] fileNames =getAssets().list("myFolder");
for(String name:fileNames){
System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)
请注意,方法列表中的参数不包含"/".
小智 13
当您需要访问层次结构中更深层次的文件夹时使用
String[] fileNames =getAssets().list("myFolder"+File.separator+"mysubfolder");
Run Code Online (Sandbox Code Playgroud)
而不是String中的"/",这将给你一个空的String数组作为结果.
Hos*_*ile 12
我不确定为什么它会这样工作,但是当我列出时"/"
,我会得到根级别的东西,而不是我"assets"
目录中的东西.我实际上找不到在我花费的时间内正确列出我的资产文件夹的方法.
我正在使用的解决方法是"subdir"
在我的"assets"
目录中创建一个目录.我把我想要访问的所有资产放在这里"subdir"
,并且:
String[] assetsIWant = assetMgr.list("subdir");
我不知道为什么"/"
将"assets"
目录本身列为其中一个文件,但是"assets"
在提供list
路径时不必指定目录.也许其他人都知道,但我希望无论如何这个提示会帮助你.
围绕这个主题有很多类似的问题,我怀疑你在库项目中使用assets文件夹.如果您尝试访问Android上的库项目中的资产,您将获得空内容和您在此处描述的确切症状
来自android"项目"文档
来源:http://developer.android.com/tools/projects/index.html
图书馆项目不能包括原始资产
这些工具不支持在库项目中使用原始资产文件(保存在assets /目录中).应用程序使用的任何资产资源都必须存储在应用程序项目本身的assets /目录中.但是,支持保存在res /目录中的资源文件.
如果是这种情况,答案是您应该只将Raw资源包含在应用程序项目的assets文件夹中而不是任何标记为库的项目中(您可以通过右键单击项目并选择属性来检查这一点,选择android条目在左侧,看看是库复选框)