无法访问原始文件夹中的文件

时间:2019-05-11 13:43:09

标签: java android file android-resources

我是Android开发的新手。我在test.txt文件夹中有一个res\raw文件。由于某种原因,我无法访问它。

这是我用来测试的代码。 file.exists()为何返回false

final String path = "android.resource://" + getActivity().getPackageName() + "/raw/test.txt";
final Uri uri = Uri.parse(path);

final File file = new File(uri.getPath());
boolean exists = file.exists(); // Returns false.

顺便说一句,我需要获取文件的Uri。我需要这样做,以便能够使用接受Uri作为参数的现有函数。

1 个答案:

答案 0 :(得分:0)

  

file.exists()为什么返回false?

首先,资源是开发计算机上的文件。它不是设备上的文件。

第二,getPath()上的Uri仅返回Uri的路径部分。您的情况就是/raw/test.txt。如果Uri是您问题的https URL,则路径为/questions/56090894/cant-access-file-in-the-raw-folder。这些都不是任何Android设备上的有效文件系统路径。您不能采用半随机字符串,将它们传递给File构造函数,并期望它们具有含义。

  

我需要获取文件的Uri

如果您确实要“为资源获取Uri”,欢迎您尝试uriandroid.resource方案有点晦涩难懂,因此很有可能您使用的函数将不支持该方案。

在这种情况下,您将需要:

  • 在原始资源上打开InputStream(在getResources().openRawResource()上打开Context
  • 在您控制的某个文件(例如FileOutputStream中)上打开getCacheDir()
  • 将字节从InputStream复制到OutputStream
  • 尝试Uri.fromFile()为图书馆创建Uri

该函数还可能期望使用其他类型的Uri。由于我们不知道这是什么功能,因此我们无法查看其文档(如果有的话)并告诉您它可能会或可能不会带来什么。