Как программно записать в общедоступную директорию внутреннего хранилища файл?

Примером такой директории может быть [Download], [Documents] и т.п. Как создать новую общедоступную директорию на том же уровне, что и указанные? Или в качестве поддиректории к ним. Все мои попытки создать такую директорию и записать туда файл (выуженные из интернета) приводили либо к Exception, либо к созданию директорий или файлов по пути /Android/data/... Хотелось бы увидеть короткий рабочий пример. PS: Меня интересует именно ВНУТРЕННЕЕ хранилище, а НЕ внешняя карта памяти!


Ответы (1 шт):

Автор решения: Алексей Смирнов

Привожу реальный код:

/*
Код для создания поддиректории [MyNewDirectory] директории 
  [Downloads],
и создания в [MyNewDirectory] файла "MyNewFile.txt"
и записью в него строки "Привет!"
*/
File dirDownLoads = 
    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Log.d(LOG_TAG, "dirDownLoads.getAbsolutePath() = " + 
dirDownLoads.getAbsolutePath());
File dir = new File(dirDownLoads, "MyNewDirectory");
if (!dir.exists()) {
    dir.mkdirs();
    Log.d(LOG_TAG, "MyNewDirectory is created!");
}
Log.d(LOG_TAG, "dir.getAbsolutePath() = " + dir.getAbsolutePath());
File file = new File(dir + File.separator + "MyNewFile.txt");
try {
    if (!file.exists()) {
        file.getParentFile().mkdirs();
        file.createNewFile();
    }
    FileOutputStream outputStream = new FileOutputStream(file);
    outputStream.write("Привет!".getBytes());                            //             
    outputStream.close();
} catch (IOException e) {
    Log.d(LOG_TAG, "[IOException] Problems with file!");
    e.printStackTrace();
} finally{
    Log.d(LOG_TAG, "file.getAbsolutePath() = " + file.getAbsolutePath());
}
     
→ Ссылка