android-get从文件浏览器中选择的.txt文件的实际路径

k4aesqcs  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(471)

我正在开发一个应用程序,我希望能够通过.txt文件从该应用程序导出和导入一些数据。该应用程序的最低api为21。
出口部分工作正常,但进口部分有问题。
我打开文件资源管理器:

  1. butImportPatient.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View view) {
  4. Intent intent = new Intent();
  5. intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
  6. intent.setType("*/*");
  7. startActivityForResult(intent, IMPORTPATIENT_ACTIVITY_REQUEST_CODE);
  8. }
  9. });

这看起来很有效。
但是我的onactivityresult不起作用,我没有找到如何从uri获取文件。
现在,以下是我的代码:

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. if (requestCode == IMPORTPATIENT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
  4. File file = new File(data.getData().getPath()) ;
  5. String path = file.getAbsolutePath() ;
  6. StringBuilder text = new StringBuilder();
  7. try {
  8. BufferedReader br = new BufferedReader(new FileReader(path));
  9. String line;
  10. while ((line = br.readLine()) != null) {
  11. text.append(line);
  12. text.append("\n");
  13. }
  14. br.close();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. AlertDialog.Builder builder = new AlertDialog.Builder(this) ;
  19. builder.setMessage(path)
  20. .show() ;
  21. }
  22. }

这是我在这里看到的多个帖子的混合,但似乎都不起作用。
我得到这条路:

  1. /document/home:List.txt

它创建filenotfoundexception。如何获取文件的真实路径?

pdkcd3nj

pdkcd3nj1#

我没有找到如何从uri获取文件。
没有文件。 ACTION_OPEN_DOCUMENTACTION_GET_CONTENT 不要打开文件。他们打开一份文件。该文档可能是一个文件。可能不会。那个 Uri 可以指出:
外部存储器上的本地文件
另一个应用程序的内部存储上的本地文件
可移动存储上的本地文件
加密的本地文件,需要动态解密
存储在数据库中的字节流 BLOB 数据库中的列
需要先由其他应用程序下载的内容
等等
如何获取文件的真实路径?
你没有。
如果只希望接受文件,请集成文件选择器库,而不是使用 ACTION_OPEN_DOCUMENTACTION_GET_CONTENT . 请记住,对外部存储的文件系统访问在android 10+上是有限的。
如果你使用 ACTION_GET_CONTENT ,以及 Uri 你得到的是 file 那么 getPath() 将是一个文件系统路径。
否则,您需要了解您不知道文档来自何处,并且停止考虑“文件的实际路径”。使用 ContentResolveropenInputStream() 要将内容复制到您控制的某个文件,请使用该文件。

相关问题