Android: чтение текстового файла с использованием неявного намерения

#android #android-intent #bufferedreader

#Android #android-намерение #bufferedreader

Вопрос:

Проблема: я пытаюсь открыть текстовый файл с использованием неявного Intent(ACTION_GET_CONTENT) и сохранить содержимое текстового файла в arraylist. Когда я пытаюсь открыть файл с указанием пути к файлу из Uri getPath() и создать BufferedReader объект для чтения из текстового файла, я получаю сообщение об ошибке, в котором говорится, что такой путь к файлу не существует.

В Logcat указывается путь к моему файлу "/document/1505-2A0C:Download/text.txt" , и когда я пытаюсь открыть файл, он говорит:

 "W/System.err: java.io.FileNotFoundException:
        /document/1505-2A0C:Download/text.txt: open failed: 
        ENOENT (No such file or directory)"
  

Вот мой код:

 @Override
public void onClick(View v) {
    // Send implicit intent to load a file from directory
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/plain");
    startActivityForResult(Intent.createChooser(intent, 
           "Load a file from directory"), REQUEST_CODE_SEARCH);
}
  

onActivityResult() :

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SEARCH) {
        try {
            Uri uri = data.getData();
            String filepath = uri.getPath();

            // In logcat : File path: /document/1505-2A0C:Download/text.txt
            Log.d("File path", filepath);

            File file = new File(filepath);
            ArrayList<String> strings = new ArrayList<>();

            /* Problem occurs here : I do not get correct file path to open a FileReader.
            In logcat: "W/System.err: java.io.FileNotFoundException:
            /document/1505-2A0C:Download/text.txt: open failed: 
            ENOENT (No such file or directory)"*/
            BufferedReader br = new BufferedReader(new FileReader(file));

            // Rest of code that converts txt file's content into arraylist
        } catch (IOException e) {
            // Codes that handles IOException
        }
    }
}
  

Вкратце: я получаю "/document/1505-2A0C:Download/text.txt" путь к файлу, и когда я открываю файл, BufferedReader используя путь к файлу, он говорит, что такого каталога нет.

Что я здесь делаю не так?

Ответ №1:

Когда я пытаюсь открыть файл с указанием пути к файлу из getPath() Uri и создать объект BufferedReader для чтения из текстового файла, я получаю сообщение об ошибке, в котором говорится, что такой путь к файлу не существует.

Это потому ACTION_GET_CONTENT , что не возвращает файл. Он возвращает a Uri , и это Uri не обязательно должно указывать на файл.

Избавьтесь от всего File этого. Используйте ContentResolver и openInputStream() , чтобы получить InputStream информацию о содержимом, идентифицированном Uri . Прочитайте свой текст, используя это InputStream .