【问题标题】:How to get the path to the Android assets folder in the application package如何获取应用包中Android assets文件夹的路径
【发布时间】:2011-08-17 04:21:00
【问题描述】:

我有一个完整的文件夹结构,我想从我的资产文件夹中复制。但是,mContext.getAssets().open() 似乎只需要一个文件名,以便它可以返回一个 InputStream,它只适用于复制单个文件。我需要的是一个由我的资产文件夹中的文件夹制作的文件,以便我可以递归所有文件和文件夹并将它们全部复制。

有人知道如何获取 assets 文件夹的路径以便我可以创建 File 对象吗?

编辑:经过一些研究,您似乎无法使用绝对路径访问 assets/ 和 raw/ 文件夹中的文件,从而能够创建 File 对象。它可能与应用程序包的加密有关。我希望有人能证明我错了!

最终编辑:我最终创建了一个字符串数组来保存额外的资产文件:

   private static final String[] DEFAULT_ALBUM_FILES =
   {INTRO_TO_FLASHUM_DIR+"03 Never Can Say Goodbye.m4a",
    INTRO_TO_FLASHUM_DIR+"11 Bossa Baroque.m4a",
    INTRO_TO_FLASHUM_DIR+"intro fling.3gp"};

然后,我使用 mContext.getAssets().open() 逐个复制每个文件以获取 InputStream。我认为目前无法使用正常的文件操作遍历资产中的文件夹。

【问题讨论】:

标签: android


【解决方案1】:
AssetManager am = con.getAssets();//u have get assets path from this code
InputStream inputStream = null;         
inputStream = am.open("file.xml");

或

String file_name="ur.xml"    
inputStream = am.open("foldername/"+ur);

【讨论】:

  • 嗨,有没有办法从 InputStream 对象中获取文件的路径?
【解决方案2】:

你能把文件夹移到你的 /raw 文件夹吗?然后你可以使用:

 com.your.package:raw/yourFile

像这样:

int resourceId = context.getResources().getIdentifier("com.your.package:raw/somefile.txt");
File f = new File(context.getResources().openRawResource(resourceId));

这里有人在使用 assets 文件夹:

Android Assets with sub folders

  InputStream is = getAssets().open("subfolder/somefile.txt");

【讨论】:

  • 这看起来很有希望。我要试一试。我会带着结果回来。谢谢!
  • 原始文件夹似乎也不允许绝对路径引用。至少我还没有弄清楚...
  • 问题是 openRawResource() 返回一个 InputStream 并且似乎没有办法将后者转换为文件。使用您的代码,我收到以下错误:构造函数 File(InputStream) 未定义。
  • 啊,那是因为我缩短了这个答案 :-) 一旦你有了 IS,然后你创建你的文件并循环 IS 将它输入到文件中。这可能不是最好的例子:roseindia.net/java/java-conversion/InputstreamToFile.shtml 但给了你一个提示
  • 感谢您的帮助。我知道这种将 IS 转换为文件的技术。但是,如何获取与资产文件夹中的文件夹对应的文件?从那里我希望做一个 file.listFiles() 来获取该文件夹的内容并遍历它以复制各个文件。事实上,我必须知道该文件夹的内容并单独复制文件。
【解决方案3】:

使用file:///android_asset 访问资产文件夹,然后您可以随时在其中提供您的子文件夹。

AssetManager assetManager = null;   // null ???  Get the AssetManager here.
        AssetFileDescriptor assetFileDescriptor = null;
        try{
           assetFileDescriptor = assetManager.openFd("file:///android_asset/yourfolder/file");
                FileDescriptor fd = assetFileDescriptor.getFileDescriptor();
       } catch (Exception e){}

【讨论】:

  • 恐怕我不明白如何使用“file:///android_asset”。你能把它写成“File file = new File(...);”的形式吗?
  • 获取assetmanager,获取assetfiledescriptor,从assetfiledescriptor获取filedescriptor。
  • 那么如何将 FileDescriptor 转换为 File 呢?
  • 大卫 - 你得到这个答案了吗?如果是,请张贴。泰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2014-02-13
  • 2015-06-21
  • 2017-04-03
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多