Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Java открытие файла, созданного вне приложения

#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. Вот, собственно говоря и весь код))

Комментариев нет:

Отправить комментарий