如何将assets文件夹中的文件路径传递给File(String path)?

时间:2012-08-05 21:16:17

标签: android xml file-io assets

  

可能重复:
  Android - How to determine the Absolute path for specific file from Assets?

我正在尝试将文件传递给File(String path)类。有没有办法在assets文件夹中找到文件的绝对路径并将其传递给File()。我尝试file:///android_asset/myfoldername/myfilename作为路径字符串,但它没有用。有什么想法吗?

2 个答案:

答案 0 :(得分:53)

AFAIK,您无法从资源文件创建File,因为这些文件存储在apk中,这意味着没有资源文件夹的路径。

但是,您可以尝试使用缓冲区和AssetManager创建File(它可以访问应用程序的原始资产文件)。

尝试做类似的事情:

AssetManager am = getAssets();
InputStream inputStream = am.open("myfoldername/myfilename");
File file = createFileFromInputStream(inputStream);

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File(my_file_name);
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

   return null;
}

让我知道你的进展。

答案 1 :(得分:9)

除非你解压缩它们,否则资产会保留在apk中。因此,没有可以输入文件的路径。您在问题中给出的路径将与WebView一起使用,但我认为这是WebView的一个特例。

您需要解压缩文件或直接使用它。

如果您有上下文,则可以使用context.getAssets().open("myfoldername/myfilename");在文件上打开InputStream。使用InputStream,您可以直接使用它,或者在某处写出来(之后您可以将它与File一起使用)。