0

我一直在努力处理一个简单的资产目录列表。我有以下结构(粗略地说):

-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 目录,尽管整个项目文件夹中没有任何内容
  • 它完全忽略了“测试”目录

所以我的问题是两个(半)

  1. 我如何只获取根文件夹(我想稍后测试它们是否存在文件夹/data.xml,它将被处理并且应用程序将执行它应该做的任何事情)
  2. 对正在发生的事情的任何解释。我理论上可以处理它甚至写出子目录的事实,尽管我不想要它们。我什至可以克服它忽略测试文件夹的事实(也许是因为它们是空的? - 好吧,空的,只包含一个子目录,而不是一个文件,但无论如何......)但是 webkit 文件夹到底是从哪里来的?它是由 apk 构建过程以某种方式“后生成”的吗?
  3. 我感觉所有子文件夹实际上都折叠到一个根目录中。是不是意味着同名文件会在构建过程中发生冲突?
4

1 回答 1

0

就我的问题的第一个(也是主要)问题而言,我想我已经弄清楚了。

try {
   String[] fileNames;
   fileNames = MyAudioGuideApplication.this.getAssets().list("");
   for(String name:fileNames){
       if (Arrays.asList(getResources().getAssets().list(name)).contains("data.xml"))
        process.the.file.here
   }
} catch (IOException e) {}

我仍然不确定 getAssets 究竟是如何工作的,但至少结果如下:

  • 如果文件夹不包含文件,则忽略它们
  • 无论结构如何,输出都按字母顺序排序
  • 当从根文件夹调用时 - 即 ...list("") - 它甚至列出子目录

也许它可以帮助像我一样挣扎的人。

于 2012-11-09T10:48:39.363 回答