当我尝试打开通过Intent选择的文件时,我收到此错误:
java.io.FileNotFoundException: /document/primary:Android/data/com.oli.myapp/Files/test.xml:open 失败:ENOENT(没有这样的文件或目录)
我不知道为什么会这样。该文件存在,因为我选择了它。这是我的代码:
文件选择:
Intent chooseFileXML = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(new Helper(FunctionsActivity.this).getPathToAppFolder());
chooseFileXML.setDataAndType(uri, "text/xml");
Intent intentXML = Intent.createChooser(chooseFileXML, getString(R.string.importXMLDatei));
startActivityForResult(intentXML, REQUEST_CODE_IMPORT_XML_FILE);
获取它的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode){
case REQUEST_CODE_IMPORT_XML_FILE:
if(resultCode == RESULT_OK){
String Fpath = data.getDataString();
File file = new File(Fpath);
Intent intent = new Intent(FunctionsActivity.this, CreateActivity.class);
intent.setAction(Intent.ACTION_DEFAULT);
intent.setData(Uri.parse(file.toURI().toString()));
startActivity(intent);
}
break;
}
}
修改
Uri uri = data.getData();
DocumentFile documentFile = DocumentFile.fromSingleUri(this, uri);
String type = documentFile.getType();
if(type.equals("text/xml")){
try {
InputStream inputStream = getContentResolver().openInputStream(uri);
if(inputStream == null){
throw new Exception();
}
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append('\n');
}
//Could read the file with no problems
createWithXMLCode(total.toString());
}catch (Exception e){
e.printStackTrace();
//TODO
}
}else{
//TODO
}
答案 0 :(得分:2)
ACTION_GET_CONTENT
为您提供Uri
。用户通过ACTION_GET_CONTENT
选择的内容根本不必是文件,更不用说您可以访问的文件了。在这种情况下,您将获得Uri
一个content
方案,这很常见。
Use a ContentResolver
and methods like getInputStream()
使用Uri
所代表的内容。