2015-09-10 2 views
-1

Мне удалось открыть каталог с 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) 
    } 
} 
+1

интересно, где, в документации, вы прочитали, что uri, возвращенный из этого API, является путем к файлу? – Selvin

+1

что заставляет вас думать, что возвращенный uri является файлом uri? что более важно, почему вы не проверили, что такое содержание uri? – njzk2

+1

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что OP не может беспокоиться о том, чтобы выполнить любую отладку, прежде чем задавать вопрос – njzk2

ответ

1

При попытке открыть файл в этом каталоге я получаю FileNotFoundException даже через что файл не существует (я проверил)

Он не возвращает вам каталог. Он возвращает вам content://Uri, который вы можете использовать с методами like fromTreeUri().

+0

Не могли бы вы дать мне пример того, как получить Uri в любой подфайл внутри возвращенного Uri? – miXo

+0

@miXo: Я еще не играл с 'ACTION_OPEN_DOCUMENT_TREE'. Однако 'fromTreeUri()' даст вам 'DocumentFile' в корне дерева, а' DocumentFile' имеет 'listFiles()' для перемещения вниз по дереву. – CommonsWare

+0

Мне это удалось. Однако это недостаточно для меня. Мне нужно получить файл в постоянное время. Tnx за помощь в любом случае. – miXo

 Смежные вопросы

  • Нет связанных вопросов^_^