【问题标题】:Struggling with assets folders在资产文件夹中苦苦挣扎
【发布时间】: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”目录

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

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

【问题讨论】:

  • 您是否尝试过使用adb shell 手动检查目录结构?这为您提供了设备目录结构的 Linux 命令行 shell。您可以cd 到/data/data/<project-name>/assets 直接查看文件。
  • 和 Code-Guru 一样,我看不出你的代码有什么问题。
  • 嗯,我在 Windows 上工作,所以我所做的是,当然,我手动检查了目录结构(由 Eclipse 生成)。但它会按预期创建普通目录。然而,目录列表完成了我上面描述的操作。
  • AssetManager 脑残了。你的观察是正确的。我发现解决这个问题的唯一方法是编写我自己的递归搜索。如果您需要它(这很容易做到),请告诉我,我会挖掘它。顺便说一句,运行时的资产是虚拟的,并与“你的”资产目录合并,所以你会看到你没有放在那里的东西。
  • 资产中的递归搜索将不胜感激,因为我不确定如何对似乎已从任何结构中展平的东西进行任何递归:(

标签: android directory assets directory-listing


【解决方案1】:

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

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("") - 它甚至会列出子目录

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多