Мне удалось открыть каталог с Storage Access Framework. SAF возвращает Uri
в открытый каталог. Когда я пытаюсь открыть файл внутри этого каталога, я получаю FileNotFoundException
, даже если файл существует (я проверил).Рамка доступа к хранилищу FileNotFoundException
Очевидно, что я делаю что-то неправильно. Это пример того, что я пытаюсь сделать:
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode != SELECT_FILE_REQUEST || resultCode != Activity.RESULT_OK) return;
if(data == null) return;
//get uri
Uri uri = data.getData(); // uri returnded form Intent.ACTION_OPEN_DOCUMENT_TREE
File file = new File(uri.getPath(), "text.txt");
//Read text from file
StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
}
br.close();
}catch (IOException e) {
Log.e("error", e.toString()); //java.io.FileNotFoundException: /tree/primary:test/text.txt: open failed: ENOENT (No such file or directory)
}
}
интересно, где, в документации, вы прочитали, что uri, возвращенный из этого API, является путем к файлу? – Selvin
что заставляет вас думать, что возвращенный uri является файлом uri? что более важно, почему вы не проверили, что такое содержание uri? – njzk2
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что OP не может беспокоиться о том, чтобы выполнить любую отладку, прежде чем задавать вопрос – njzk2