为什么所选文件的父路径不可用?

时间:2016-09-05 20:02:18

标签: android android-file

以下代码用于启动文件管理器以允许用户选择文件:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE_CUSTOM_FOLDER);

如果用户在文件夹下载中选择文件foo.txt,则返回文件的路径为

/document/2071-13DB:Download/foo.txt

阅读该文件没有问题。当应用程序尝试将文本文件(foo_new.txt)写入文件夹" / document / 2071-13DB:Download"时,会出现以下异常:

Error:Directory '/document/2071-13DB:Download' could not be created.

有人可以对此有所了解吗?我试图允许用户为应用程序选择一个文件夹以保存文件。

1 个答案:

答案 0 :(得分:1)

  

以下代码用于启动文件管理器以允许用户选择文件

不,不是。它用于从支持特定Intent结构的任何活动中获取一段内容。

  

如果用户在文件夹下载中选择文件foo.txt,则返回文件的路径为

您没有收到档案。您收到Uri一段内容。特别是,我强烈怀疑这个Uri有一个content方案。在这种情况下,这条路对你来说毫无意义。

  

当应用尝试将文本文件(foo_new.txt)写入文件夹" / document / 2071-13DB:Download"时,会出现以下异常

那不是文件夹。从你的角度来看,这是一系列随机的角色。

例如,此网页的网址为https://stackoverflow.com/questions/39337012/why-is-the-parent-path-of-a-selected-file-not-usable。您可以使用HTTP客户端来读取该页面的内容。但是,如果您尝试使用Java的File对象将新文件写入计算机上的/questions/39337012/,您会发现这不起作用,因为您没有{{1您计算机上的文件夹。在这里,URL指向不在您计算机的文件系统上的内容。

同样,您无法对/questions/39337012/的一部分执行字符串操作,而是可以使用另一个UriUri不必指向文件系统上的文件。

  

我试图让用户为应用程序选择一个文件夹以保存文件。

然后使用a directory-chooser library

或者,在Android 5.0+设备上,使用Uri,它是存储访问框架的一部分。从那里开始,使用ACTION_OPEN_DOCUMENT_TREE创建新文件夹,在这些文件夹中创建新内容等,全部使用DocumentFile值,而不尝试解密Uri值的各个部分(例如{ {1}})。