30

可能重复:
Android - 如何从资产中确定特定文件的绝对路径?

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

4

2 回答 2

55

AFAIK,您不能File从资产文件创建一个,因为它们存储在 apk 中,这意味着没有资产文件夹的路径。

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

尝试执行以下操作:

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;
}

让我知道你的进展。

于 2012-08-05T23:12:02.060 回答
9

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

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

如果你有一个 Context,你可以使用context.getAssets().open("myfoldername/myfilename");在文件上打开一个 InputStream。使用 InputStream,您可以直接使用它,或者将其写在某个地方(之后您可以将它与 File 一起使用)。

于 2012-08-05T21:28:06.947 回答