Android - 获取从文件资源管理器中选择的 .txt 文件的真实路径
Posted
技术标签:
【中文标题】Android - 获取从文件资源管理器中选择的 .txt 文件的真实路径【英文标题】:Android - Get real path of a .txt file selected from the file explorer 【发布时间】:2018-08-19 15:38:19 【问题描述】:我正在开发一个应用程序,我希望能够在 .txt 文件中从应用程序导出和导入一些数据。 该应用的最低 API 为 21。
导出部分运行良好,但导入部分出现问题。
我打开文件资源管理器:
butImportPatient.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
startActivityForResult(intent, IMPORTPATIENT_ACTIVITY_REQUEST_CODE);
);
看起来它正在工作。
但是我的 onActivityResult 不起作用,我没有找到如何从 Uri 获取文件。
现在,这是我的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == IMPORTPATIENT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK)
File file = new File(data.getData().getPath()) ;
String path = file.getAbsolutePath() ;
StringBuilder text = new StringBuilder();
try
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.readLine()) != null)
text.append(line);
text.append("\n");
br.close();
catch (IOException e)
e.printStackTrace();
AlertDialog.Builder builder = new AlertDialog.Builder(this) ;
builder.setMessage(path)
.show() ;
这是我在这里看到的多个帖子的混合,但似乎没有一个有效。
我得到了这条路:
/document/home:List.txt
它会创建 FileNotFoundException。如何获取文件的真实路径?
【问题讨论】:
***.com/a/59104787/3141844 【参考方案1】:我没有找到如何从 Uri 获取文件。
没有文件。 ACTION_OPEN_DOCUMENT
和 ACTION_GET_CONTENT
不打开文件。他们打开一个文档。该文档可能是一个文件。可能不会。
Uri
可能指向:
BLOB
列中保存的字节流
需要其他应用先下载的一段内容
...等等
如何获取文件的真实路径?
你没有。
如果您只想接受文件,请集成 a file chooser library 而不是使用 ACTION_OPEN_DOCUMENT
或
ACTION_GET_CONTENT
。请记住,在 android 10+ 上,文件系统对外部存储的访问受到限制。
如果你使用ACTION_GET_CONTENT
,而你得到的Uri
的方案是file
,那么getPath()
就是一个文件系统路径。
否则,您需要了解您不知道文档来自何处,并且停止考虑“文件的真实路径”。使用ContentResolver
和openInputStream()
将内容复制到您控制的某个文件中,然后使用该文件。
【讨论】:
感谢您的回答!我承认我在不知道代码含义的情况下抓取了代码。我会检查那个网站,它看起来真的很有趣。 我应该使用哪个 Intent 来获取真实路径?也许在应用程序上读取文件本身。但是要获得一个真实的文件......还是一个真实的路径? @Amg91:“我应该使用哪个 Intent 来获取真实路径?” - 空无一人。从我的回答中引用我自己的话,“如果您只想接受文件,请集成 file chooser library”。 那么如何正确使用Uri呢? @Foxhunt:这取决于你想用它做什么。例如,您可以使用ContentResolver
和openInputStream()
来读入内容。以上是关于Android - 获取从文件资源管理器中选择的 .txt 文件的真实路径的主要内容,如果未能解决你的问题,请参考以下文章