【发布时间】:2012-11-08 22:38:24
【问题描述】:
我一直在为一个简单的资产目录列表而苦苦挣扎。我有以下结构(粗略地说):
-dirA
--data.xml
--AudioSUBdir
---some files here
--VideoSUBdir
---some files here
-dirB
--data.xml
--AudioSUBdir
---some files here
-test
--SUBtestDir
我想要的只是父资产目录的列表(即 dirA、dirB 和 test;然后我将读取 data.xml 文件并在此基础上对子目录的内容进行处理)。
我认为获得所需的两个字符串会很容易:
try {
String[] fileNames;
fileNames = getAssets().list("");
for(String name:fileNames){
// process it, e.g. write it out }
} catch (IOException e) {}
但是,我得到的是类似 AudioSUBdir、dirA、dirB、VideoSUBdir、webkit 的东西(根本没有该死的 webkit!) 它似乎同时在做几件奇怪的事情:
- 它会忽略目录结构,即甚至会读取不应该读取的子目录
- 它神奇地显示了一个 webkit 目录,尽管整个项目文件夹中没有任何目录
- 它完全忽略了“test”目录
所以我的问题是两个(半个)
- 我如何只获取根文件夹(我想稍后测试它们是否存在文件夹/data.xml,它将被处理并且应用程序将执行它应该做的任何事情)
- 对所发生情况的任何解释。我理论上可以处理它甚至写出子目录的事实,尽管我不想要它们。我什至可以克服它忽略测试文件夹的事实(也许是因为它们是空的? - 好吧,空的,只包含一个子目录,而不是一个文件,但无论如何......)但是 webkit 文件夹到底是从哪里来的?它是由 apk 构建过程以某种方式“后生成”的吗?
- 我感觉所有子文件夹实际上都折叠到一个根目录中。是不是意味着在构建过程中同名文件会发生冲突?
【问题讨论】:
-
您是否尝试过使用
adb shell手动检查目录结构?这为您提供了设备目录结构的 Linux 命令行 shell。您可以cd到/data/data/<project-name>/assets直接查看文件。 -
和 Code-Guru 一样,我看不出你的代码有什么问题。
-
嗯,我在 Windows 上工作,所以我所做的是,当然,我手动检查了目录结构(由 Eclipse 生成)。但它会按预期创建普通目录。然而,目录列表完成了我上面描述的操作。
-
AssetManager 脑残了。你的观察是正确的。我发现解决这个问题的唯一方法是编写我自己的递归搜索。如果您需要它(这很容易做到),请告诉我,我会挖掘它。顺便说一句,运行时的资产是虚拟的,并与“你的”资产目录合并,所以你会看到你没有放在那里的东西。
-
资产中的递归搜索将不胜感激,因为我不确定如何对似乎已从任何结构中展平的东西进行任何递归:(
标签: android directory assets directory-listing