#java #android #файлы
Здравствуйте. Пытаюсь написать приложение для Android (в данном случае для 6.0). Возникла проблема в процессе реализации: Нужно открыть файл, который не был создан приложением. Переместить файл в нужную директорию (а именно в директорию приложений) - не проблема. Проблема в том, что приложение может открыть только тот файл, который был заранее создан этим приложением. При попытке открыть любые другие файлы получаю Permission denied. Причём в манифесте выставлены разрешения на чтение/запись с карточки (будто это помогает), в телефоне все галочки на разрешениях установлены. Есть ли какие-то способы открытия такого файла для чтения? void writeFile() { try { // отрываем поток для записи BufferedReader br = new BufferedReader(new InputStreamReader( openFileInput(FILENAME))); String line = ""; String FileContent = ""; String NL = System.getProperty("line.separator"); while ((line = br.readLine()) != null) { FileContent = FileContent + line + NL; } br.close(); FileContent = FileContent.replaceAll("(H|h)(E|e)(L|l)(L|l)(O|o)", "1234"); System.out.println(FileContent); BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME)); bw.write(FileContent); bw.close(); Log.d(LOG_TAG, "Файл записан"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
Ответы
Ответ 1
Пытался считывать файлы, все работало нормально до того как протестил на 6.0 девайсе. С версии 6.0 вводится фича такая: https://developer.android.com/training/permissions/requesting.html if((ContextCompat.checkSelfPermission(Context ctx, Manifest.permission.WRITE_EXTERNAL_STORAGE) ) != 0) { ActivityCompat.requestPermissions(Activity act, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE},1); }Ответ 2
Считать файл с sd_карты: final String EXPANSION = ".txt"; //расширение файла final String FILENAME_SD = "file" + EXPANSION; //имя файла final String DIR_SD = "MyFiles"; //папка на sd-карте, в которой лежит ваш файл void readFileSD() { // проверяем доступность SD if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Log.d(LOG_TAG, "SD-карта не доступна: " + Environment.getExternalStorageState()); return; } // получаем путь к SD File sdPath = Environment.getExternalStorageDirectory(); // добавляем свой каталог к пути sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD); // формируем объект File, который содержит путь к файлу File sdFile = new File(sdPath, FILENAME_SD); try { // открываем поток для чтения BufferedReader br = new BufferedReader(new FileReader(sdFile)); String str = ""; // читаем содержимое while ((str = br.readLine()) != null) { Log.d(LOG_TAG, str); //выводим содержимое в лог } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } Осталось в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE. Вот, собственно говоря и весь код))
Комментариев нет:
Отправить комментарий