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

31

可能是重复问题:
Android - 如何从Assets获取特定文件的绝对路径?

我正在尝试将文件传递给File(String path)类。是否有一种方法可以找到assets文件夹中文件的绝对路径并将其传递给File()。我尝试使用file:///android_asset/myfoldername/myfilename作为路径字符串,但它没有起作用。有任何想法吗?

2个回答

56
据我所知,你无法从资产文件创建一个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;
}

请告诉我你的进展情况。


2
不起作用 缺少方法 - Harsh Trivedi
1
你的代码一团糟,你真的需要让它更清晰明了。 - desgraci
1
@desgraci,抱歉。已经完成了。我没有意识到它有多混乱。复制粘贴的事情:D - yugidroid
谢谢,但你忘了加 return :p - desgraci
所以你的意思是每当我们需要时就需要写入文件?听起来不太好!! - Daud Arfin
1
可能有所帮助的是将文件写入目录中,例如:File f = new File(getFilesDir()+"/my_file_name.jpg"); - Droid Teahouse

10
除非你将其解压缩,否则资源将保留在apk内部。因此,您无法将路径输入到文件中。您在问题中提供的路径将与/或在WebView中工作,但我认为这是WebView的特殊情况。
您需要解压文件或直接使用它。
如果您拥有上下文,则可以使用打开文件上的InputStream。使用InputStream,您可以直接使用它,或者将其写入某个位置(之后可以将其与文件一起使用)。

非常感谢,这很有帮助。但是下面的代码让我不用把文件写到其他地方。 - akd
@akd 你指的是下面哪段代码?你是在说yugidroid的代码吗?因为那段代码不是在创建一个新文件吗? - shoke
这是在2012年的事了。我真的记不清了,但我想我在谈论yugidroid代码,因为只有两个答案。我猜yugidroid声称它提供对应用程序的原始资产文件的访问而不是创建文件。 - akd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接