Java Android-获取从文件浏览器中选择的.txt文件的实际路径
我正在开发一个应用程序,我希望能够通过.txt文件从该应用程序导出和导入一些数据。 该应用程序的最低API为21 出口部分工作正常,但进口部分有问题 我打开文件资源管理器:Java Android-获取从文件浏览器中选择的.txt文件的实际路径,java,android,file,android-activity,path,Java,Android,File,Android Activity,Path,我正在开发一个应用程序,我希望能够通过.txt文件从该应用程序导出和导入一些数据。 该应用程序的最低API为21 出口部分工作正常,但进口部分有问题 我打开文件资源管理器: butImportPatient.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent();
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。如何获取文件的真实路径
我没有找到如何从Uri获取文件
没有文件<代码>操作\打开文档和操作\获取内容
不打开文件。他们打开一份文件。该文档可能是一个文件。可能不会。
Uri
可能指向:
- 外部存储器上的本地文件
- 另一个应用程序的内部存储上的本地文件
- 可移动存储上的本地文件
- 加密的本地文件,需要动态解密
- 数据库中
列中保存的字节流BLOB
- 需要先由其他应用程序下载的内容
- ……等等
操作\u打开\u文档
或
操作获取内容
。请记住,对外部存储的文件系统访问在Android 10+上是有限的
如果您使用ACTION\u GET\u CONTENT
,并且您得到的Uri
的方案是file
,那么getPath()
将是一个文件系统路径
否则,您需要了解您不知道文档来自何处,并且停止考虑“文件的实际路径”。使用
ContentResolver
和openInputStream()
将内容复制到您控制的某个文件中,然后使用该文件。谢谢您的回答!我承认我没有真正了解代码的含义就抓住了它。我会检查那个网站,它看起来真的很有趣。我应该用什么意图来获得真正的路径?也许在应用程序上读取文件本身。但是得到一个真正的文件。。。还是一条真正的路径?@Amg91:“我应该使用哪种意图来获得真正的路径?”——没有。引用我自己的回答,“如果你只想接受文件,那么集成一个”。那么如何正确使用Uri呢?@Foxhunt:这取决于你想用它做什么。例如,您可以使用ContentResolver
和openInputStream()
读取内容。