Я новичок в разработке приложений Android (java), и мне нужна помощь. Мне нужно прочитать текстовый файл и сохранить каждую строку в List . Я прочитал много обсуждений здесь, в stackoverflow. Один из них вдохновил мой код. Но я не могу решить свою проблему ...
Поэтому я вызываю средство выбора файлов, как показано ниже:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, getString(R.string.vyber_soubor)), VYBER_SOUBORU_POZNAMKA);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(kontext, "SeznamPoznamek::onCreate::tlPridej.setOnClickListener - Please install a File Manager.", Toast.LENGTH_LONG).show();
}
и в функции onActivityResult (ниже показана только необходимая часть, остальная функция помечены точками) выбрать из намерения выбранного файла. С помощью функции getPath извлеките путь к файлу uri в виде строки. Эту строку пути к файлу я отправляю в функцию importujTextovouPoznamku, где я хочу читать строки из текстового файла. Но в строке «FileInputStream fis = new FileInputStream (mujExterniSoubor);» является исключением ("java .io.FileNotFoundException: /document/primary:DCIM/veci_svor.txt: ошибка открытия: ENOENT (Нет такого файла или каталога)") выбросил
В манифесте:
и приложение имеет разрешение на запись в хранилище.
Я удивлен, что у меня есть двойная точка в пути к файлу (вы можете увидеть мою строку пути к файлу в исключении, также видно, что мой файл хранится в папке DCIM)
И второй сюрприз для меня - это то, что на реальном телефоне Huawei honor 6A (android 6) этот код работает (но только на этом телефоне), а на другом телефоне Motorola e5 - нет. plus (android 8) или виртуальных машин (android 6 или 8).
Кто-нибудь может мне помочь или посоветовать, что я должен попытаться продолжить в моем коде без исключения Спасибо fik236
некоторая часть кода:
private String getPath(Uri uri) {
String path = null;
String[] projection = { MediaStore.Files.FileColumns.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if(cursor == null){
path = uri.getPath();
}
else{
cursor.moveToFirst();
int column_index = cursor.getColumnIndexOrThrow(projection[0]);
path = cursor.getString(column_index);
cursor.close();
}
return ((path == null || path.isEmpty()) ? (uri.getPath()) : path);
}
public void onActivityResult(int kodVolani, int vysledekVolani, Intent mujVraceciIntent) {
super.onActivityResult(kodVolani, vysledekVolani, mujVraceciIntent);
.
.
.
} else if ( kodVolani== VYBER_SOUBORU_POZNAMKA) {
Uri uri = mujVraceciIntent.getData();
String src = getPath(uri);
importujTextovouPoznamku(src);
}
.
.
.
public void importujTextovouPoznamku (String jmenoSouboru) {
List<String> precteneRadky = new ArrayList<>();
File mujExterniSoubor = new File(jmenoSouboru);
try {
FileInputStream fis = new FileInputStream(mujExterniSoubor); //problem
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String radek;
while ((radek = br.readLine()) != null) {
precteneRadky.add(radek);
}
br.close();
in.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getBaseContext(),"SeznamPoznamek.java::prectiRadkyZeSouboru:" + e.getMessage(), Toast.LENGTH_LONG).show();
}
.
.
.