#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
.