我正在开发一个应用程序,我希望能够在.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。如何获得文件的真实路径?
答案 0 :(得分:4)
我没有找到如何从Uri获取文件。
没有档案。 ACTION_OPEN_DOCUMENT
和ACTION_GET_CONTENT
不会打开文件。他们打开一份文件。该文档可能是一个文件。它可能不会。
Uri
可能指向:
BLOB
列中保存的字节流如何获取文件的真实路径?
你没有。
如果您只想接受文件,请集成a file chooser library,而不是使用ACTION_OPEN_DOCUMENT
或
ACTION_GET_CONTENT
。请记住,文件系统对外部存储的访问计划与Android Q一起消失。
如果您使用ACTION_GET_CONTENT
,并且Uri
的方案是file
,则getPath()
将成为文件系统路径。
否则,您需要了解您不知道文档来自哪里,并且不再考虑“文件的真实路径”。使用ContentResolver
和openInputStream()
将内容的副本复制到您控制的某个文件中,然后使用该文件。
答案 1 :(得分:0)
Android无法从设备读取文件的真实路径 我建议您使用此库选择文件
实现'com.droidninja:filepicker:2.2.1' FielPicker