Ошибка создания папки на телефоне

Android не удалось создать папку

Вот причины, по которым я столкнулся

1. Нет приложения разрешения, это очень просто, добавьте приложение разрешения в файл manifect.xml

<uses-permission android:name=»android.permission.READ_EXTERNAL_STORAGE» />
<uses-permission android:name=»android.permission.WRITE_EXTERNAL_STORAGE» />
 

2. Версия Android выше 6.0, после 6.0 многим мобильным телефонам необходимо динамически запрашивать разрешения. Недостаточно настроить это в файле.

    // Разрешение динамического приложения
    private void getPrimission() {
        PackageManager pm = getPackageManager();
        boolean permission = (PackageManager.PERMISSION_GRANTED ==
                pm.checkPermission("android.permission.CAMERA", "com.zhengyuan.emcarsend"));
        if (permission) {
                         // "Есть это разрешение"
        } else {
                         // «Нет такого разрешения»
                         // Если версия Android больше или равна 6.0, разрешение необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 15);
            }
        }
    }

В приведенном выше примере есть разрешения на чтение и запись для камеры и места для хранения.

3. Иногда создание папки не удается, даже если вы запрашиваете разрешение. Это может быть создание нескольких уровней каталогов одновременно. Android не поддерживает это. Вы можете попробовать создать каталог первого уровня.

Кстати,

Я столкнулся с этой проблемой, когда делал снимки. Я продолжал снимать и не мог создавать папки.

Одна из причин — создание многоуровневых каталогов,

Другой — отчет об ошибке 7.0, доступный за пределами приложения через ClipData.Item.getUri ().

Вы можете обратиться кhttps://blog.csdn.net/qq_23179075/article/details/70314473,

Мой телефон разработки — Nexus 5, работает Android 4.4.2.

В моем приложении я пытаюсь создать папку на внешнем хранилище, которая будет хранить отладочную информацию для моего приложения. В основном он будет содержать все команды, выполняемые приложением, поэтому, когда пользователь сталкивается с проблемой, у меня есть возможность отправить мне информацию из папки отладки для анализа.

Я начал, пытаясь записать файл в папку, но обнаружил, что возникла ошибка при создании папки. Сначала я использовал mkdir(), затем перешел на mkdirs(), который также не работал.

У меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в моем манифесте.

Вот код для создания папки:

    File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");

    String path = folder.getPath();

    if(!folder.mkdirs() || !folder.exists()){        
            Log.e(LOG_TAG, path + " failed");
        } else {
            Log.d(LOG_TAG, path + " succeeded");
        } 

Вот что я также пробовал:

    //Check SD card state
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
        Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
    } else {
        Log.d(LOG_TAG, "External storage is not read only or unavailable");
    }

Это возвращает, что внешняя память не доступна только для чтения или недоступна.

Я также пробовал разные пути, такие как File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");

Вот где это стало действительно запутанным.

Я пробовал разработку на разных телефонах. Во-первых, я схватил Galaxy S4 GT-i9505 running Android 4.2.2, и он сработал. Мне удалось создать папки и написать им. Это показало мне, что код работает. Также путь, возвращаемый при запуске кода на S4 и Nexus 5, был таким же.

Тогда я подумал, что это может быть версия для Android. Поэтому я схватил Nexus 4 с Android 4.4.2, и код тоже работал над ним. Создал папки и разрешил мне писать им.

Ни один из телефонов не укоренен и не является стандартным. Там нет специальных приложений или чего-либо, что я могу думать о настройках на Nexus 5, которые могут вызвать проблемы с разрешениями. Соединение установлено на Media Device (MTP).

EDIT:

Я должен добавить, что я попробовал следующее, которое также не сработало:

  • Запись файла в корневой каталог внешнего хранилища
  • Создание файла в корневом каталоге внешнего хранилища и его запись
  • Создание папки в выделенном пути и запись в нее файла
  • Создание файла в указанном пути и его записи

Я запутался в том, что вызывает это, есть ли что-нибудь еще, что я могу проверить или изменить, чтобы исправить проблему?

ИЗМЕНИТЬ 2:

Оказывается, проблема возникла из-за, я думаю, индексации.

В основном все другие устройства, на которых я тестировался, позволили мне снова подключить USB-соединение и просмотреть созданные файлы и папки.

По какой-то причине мой Nexus 5 не индексирует папки/файлы, даже если они существуют.

Я загрузил другое стороннее приложение-проводник файлов и заметил, что все папки и файлы были там.

Итак, чтобы просматривать эти папки и файлы с помощью USB-отладки, я должен перезагрузить телефон, чтобы повторно проиндексировать их, что кажется довольно раздражающим, но это лучше, чем он вообще не работает.

Спасибо.

Я знаю, что это дублирующий вопрос, но для этого нет решения. Я использовал последний уровень API 24 и тест на API 23. Мне нужно сохранить изображение на SD-карте с моей папкой имени приложения, но папка не создана…

Я написал следующий метод, но он не работает

    public  void actionScreenShot(View view) {

        //enable drawing cache true
        imageContainer.setDrawingCacheEnabled(true);
        imageContainer.buildDrawingCache(true);

        //create image from layout
        Bitmap bitmap = Bitmap.createBitmap(imageContainer.getDrawingCache());


        //String folder_path = getApplicationContext().getFilesDir().getPath() + "/MyAppTest/"; //It's work properly
        //String folder_path = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DCIM) + "/MyAppTest/"; //It's work properly 
        String folder_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/MyAppTest"; //It's not work properly
        if (checkFile(folder_path)) {
            saveFile(new File(folder_path), bitmap);
        } else {
            File folder = new File(folder_path);
            if (folder.mkdirs()) {
                saveFile(folder, bitmap);
            } else {
                Log.d("Directory", " >> not created");
            }

        }
    }

    public void saveFile(File folder, Bitmap bitmap) {
        boolean success = false;
        try {
            File file = new File(folder, "temp.png");
            if (file.exists()) file.delete();
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            success = checkDatabase(file.getPath());
        }catch (Exception e) {
            e.printStackTrace();
        }

        if (success) {
            Log.d("FILE", "success");
        } else {
            Log.d("FILE", "not success");
        }
    }

    public boolean checkFile(String myPath) {
        boolean isExist = false;
        try {
            File file = new File(myPath);
            isExist = file.exists();
        } catch (Exception e) {

        }
        return isExist;

    }

Разрешение дается также в AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Зарегистрируйте трассировку следующим образом…

10-05 17:08:09.424 2808-2808/packagename D/Directory  >> not created

Если какое-либо решение доступно, помогите мне…

Благодарность….

2 ответа

Вот простой код для создания папки на SD-карте

// create a File object for the parent directory
File newFolder = new File("/sdcard/newFolder/");
// have the object build the directory structure, if needed.
newFolder.mkdirs();
// create a File object for the output file
File outputFile = new File(newFolder, filename);
// now attach the OutputStream to the file object, instead of a String           
FileOutputStream fos = new FileOutputStream(outputFile);

Разрешение в файле манифеста

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


0

hatib abrar
5 Окт 2016 в 14:24

Проблема в том, что вы используете API 23 и 24 (Marshmallow). Google изменил стратегию разрешений с API 23. Уменьшите целевую версию до 22. Это сработает. Если вы хотите 23 или 24, включите код для запроса разрешения во время выполнения.


0

Ruthwik Warrier
5 Окт 2016 в 15:06

Использую андроид API16. С начала для получения пути к SD карте использовал следующий код sdDir = Environment.getExternalStorageDirectory();, но мне возвращался путь к внутренней SD. После этого переделал получение пути через файл «/proc/mounts». Путь стал получать правильный. При создании файла
File aaa = new File(getSDcardPath()+"/aaa.txt");
ни каких ошибок не возникает. Но как только я создаю поток
FileOutputStream out = new FileOutputStream(aaa);
для записи данных в файл срабатывает исключение FileNotFoundException. После этого попробовал просто создать папку, тоже ни ошибок, ни исключений не появляется. Но и папка не создается. В манифесте прописал следующие разрешения

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Может кто уже сталкивался с этой проблемой и нашел решение. Помогите пожалуйста, а то это вроде последняя проблема которая осталась.P.S. Чтением с карта памяти без проблем, все работает

Ничто так не раздражает перфекциониста, как отсутствие порядка. Он должен быть везде, в том числе на смартфоне. Только представьте, если у вас по рабочему столу разбросаны иконки приложений, а в проводнике уже тысячи файлов, то как найти нужную фотографию или, например, документ? Сделать это практически невозможно, если ранее вы не позаботились о создании папок. А ведь на каждом смартфоне есть возможность объединить группы файлов и приложений в отдельные каталоги для упрощенного доступа к ним. Поэтому сегодня мы ответим на все вопросы, связанные с папками на Андроид.

Папка на Андроид: как создать, удалить или скрыть. Папки на Андроид позволяют упорядочить информацию, которая хранится на вашем смартфоне. Фото.

Папки на Андроид позволяют упорядочить информацию, которая хранится на вашем смартфоне

Содержание

  • 1 Где в телефоне папки
  • 2 Какие папки в Андроиде
  • 3 Как создать папку на Андроиде
    • 3.1 Папка на рабочем столе Андроид
    • 3.2 Как создать альбом в галерее
  • 4 Как переименовать папку
  • 5 Как скрыть папку на Андроиде
  • 6 Как переместить папку в Андроиде
  • 7 Как найти папку на телефоне
  • 8 Как удалить папку

Где в телефоне папки

Доступ к папкам на телефоне Андроид осуществляется через приложение «Проводник», которое также может называться «Менеджер файлов» или просто «Файлы». Каталоги, содержащие в себе фото и видео, также отображаются в стандартной программе «Галерея». Ну а папки с приложениями вы можете найти на рабочем столе.

Где в телефоне папки. На вашем смартфоне приложение может называться иначе. Фото.

На вашем смартфоне приложение может называться иначе

Для доступа к каталогам с файлами не обязательно использовать предустановленный софт. В Google Play есть огромное количество альтернативных менеджеров, среди которых стоит выделить RS File или Total Commander. Если по каким-то причинам вас не устраивает стандартный проводник, воспользуйтесь сторонним ПО.

⚡ Подпишись на Androidinsider в Дзене, где мы публикуем эксклюзивные материалы

Какие папки в Андроиде

Даже если вы только-только включили свой новенький смартфон и открыли проводник, то обнаружите в нем стандартные папки Андроид. Как правило, в каталогах вроде «Boot» и «Android» содержатся системные файлы, которые нельзя удалять. Поэтому рекомендую для начала прочитать отдельный материал, прежде чем прикасаться к таким папками.

Также по мере использования смартфона система автоматически создаст папки «DCIM» (здесь хранятся фото и видео, снятые на камеру), Pictures (изображения из различных приложений), «Music» (музыка), «Movies» (видео), «Download» (загрузки) и другие. К ним я тоже советую не прикасаться, а их содержимое можно беспрепятственно удалить, если появится такая потребность.

Как создать папку на Андроиде

Допустим, вам надоел беспорядок в проводнике, и вы решили разобраться, как создать папку на телефоне. Что для этого потребуется? А все очень просто. Действуйте по инструкции:

  1. Запустите менеджер файлов.
  2. Откройте корневую папку (внутренний накопитель или SD-карта).
  3. Нажмите кнопку в виде трех точек.
  4. Выберите опцию «Новая папка».
  5. Введите название каталога.
  6. Подтвердите его создание нажатием на кнопку «ОК».

Как создать папку на Андроиде. Папке можно присвоить любое имя. Фото.

Папке можно присвоить любое имя

Этот алгоритм наглядно показывает, как сделать папку на телефоне Xiaomi. На вашем устройстве некоторые шаги могут отличаться, но, в целом, они будут схожие.

Папка на рабочем столе Андроид

Также существуют папки на рабочем столе на телефоне. Некоторые из них (например, «Google») появляются автоматически. Но вы можете создать собственный каталог, отсортировав тем самым приложения. Вот, как создать папку на рабочем столе Андроид:

  1. Задержите палец на иконке приложения.
  2. Наведите его на ярлык второй программы.
  3. Программы автоматически преобразуются в папку, которой будет присвоено имя. Туда же можно поместить все остальные приложения.

Папка на рабочем столе Андроид. Повторите на своем смартфоне. Должно получиться. Фото.

Повторите на своем смартфоне. Должно получиться

Эта инструкция актуальна для большинства современных смартфонов вне зависимости от производителя, так что вы вряд ли столкнетесь с какими-то сложностями.

❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате

Как создать альбом в галерее

«Галерея» — отдельное приложение, созданное для просмотра фото и видео. Обычно папки здесь создаются автоматически. Снимки попадают в каталог «Камера», а остальные картинки — во «Все фото». Также в разделе «Другие альбомы» вы найдете папки с изображениями и видеороликами, которые автоматически подтягиваются из проводника. А вот, как сделать альбом в галерее напрямую:

  1. Запустите приложение «Галерея» (может называться «Фото»).
  2. Откройте вкладку «Альбомы».
  3. Нажмите кнопку «+».
  4. Придумайте название альбома.
  5. Подтвердите его создание нажатием на кнопку «ОК».
  6. Выберите файлы, которые в него нужно добавить.

Как создать альбом в галерее. Возможно, для появления кнопки создания альбома в вашей галерее придется открыть меню через «три точки». Фото.

Возможно, для появления кнопки создания альбома в вашей галерее придется открыть меню через «три точки»

После этого наряду с другими каталогами отобразится только что созданный вами альбом.

Как переименовать папку

Любой созданный вами каталог с файлами или ярлыками приложений можно переименовать. Так, чтобы переименовать папку в проводнике, нужно задержать палец на выбранном каталоге, нажать кнопку «Еще», а затем — «Переименовать». То же самое касается изменения названий в галерее. Но в случае с папкой на главном экране ее сначала нужно открыть, а затем — тапнуть по текущему имени.

Как переименовать папку. Переименовать можно все, что угодно. Фото.

Переименовать можно все, что угодно

Как скрыть папку на Андроиде

Порой мы добавляем в папки на телефоне файлы, которые никто не должен увидеть. Чтобы обезопасить информацию, Samsung, например, предлагает создать защищенную папку, о чем мы уже рассказывали. А владельцам устройств других производителей нужно разобраться, как скрыть папку на телефоне:

  1. Запустите проводник.
  2. Откройте меню изменения названия папки.
  3. Поставьте точку в самом начале.
  4. Сохраните изменения.

Как скрыть папку на Андроиде. Поставьте «.» перед названием папки в проводнике. Фото.

Поставьте «.» перед названием папки в проводнике

Теперь, чтобы найти папку, через меню проводника нужно выбрать опцию «Показывать скрытые файлы». Обратите внимание, что подобная фишка работает только в проводнике. На рабочем столе таким образом спрятать каталоги не получится. Однако есть инструкция, как скрыть альбом в галерее: просто выделите папку и нажмите кнопку «Скрыть».

🔥 Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс

Как переместить папку в Андроиде

Созданными каталогами можно управлять, перемещая их из одного места в другое. Если операция выполняется в рамках одного смартфона, то переместить папку на Андроид можно через контекстное меню, вызываемое удержанием пальца на каталоге. Далее остается выбрать место назначения и нажать кнопку «Вставить». С альбомами такую операцию провернуть не получится, а папки с приложениями можно перемещать только по пространству рабочего стола.

Как переместить папку в Андроиде. Перемещать можно в том числе скрытые папки. Фото.

Перемещать можно в том числе скрытые папки

Как найти папку на телефоне

Скрывая и перемещая каталоги, вы можете свести на нет всю пользу папок, ведь их будет сложно найти. Если вы помните название — воспользуйтесь поисковой строкой проводника, указав имя полностью или частично. В противном случае придется искать каталоги и файлы, содержащиеся в них, через категории, представленные в проводнике.

Как найти папку на телефоне. Для поиска в проводнике предусмотрена специальная функция, а также разбивка по категориям. Фото.

Для поиска в проводнике предусмотрена специальная функция, а также разбивка по категориям

⚡ Подпишись на Androidinsider в Пульс Mail.ru, чтобы получать новости из мира Андроид первым

Как удалить папку

Сегодня мы очень подробно разобрали все действия, которые можно выполнять с папками на Android. Однако не лишним будет также отметить, как удалить папку на телефоне. Для этого нужно задержать палец на иконке каталога и нажать соответствующую кнопку. Что касается папок на рабочем столе Андроид, то они удаляются путем обратного перемещения приложений в свободную область главного экрана. Как только вы уберете последний ярлык, каталог исчезнет.

Как удалить папку. В проводнике и на рабочем столе папки удаляются по-разному. Фото.

В проводнике и на рабочем столе папки удаляются по-разному

Будьте очень внимательны, избавляясь от каталогов, чьи названия видите впервые. Один из них может оказаться системным компонентом, а его удаление, скорее всего, приведет к непоправимым последствиям. Однако без подобных проблем можно удалить папку Другое, о чем мы тоже рассказывали.

I have been trying to create a directory in /sdcard programmatically, but it’s not working. The code below always outputs directory not created.

boolean success = (new File("/sdcard/map")).mkdir(); 
if (!success) {
    Log.i("directory not created", "directory not created");
} else {
    Log.i("directory created", "directory created");
}

Nikhil's user avatar

Nikhil

16.2k20 gold badges64 silver badges81 bronze badges

asked Oct 4, 2010 at 7:51

sajjoo's user avatar

There are three things to consider here:

  1. Don’t assume that the sd card is mounted at /sdcard (May be true in the default case, but better not to hard code.). You can get the location of sdcard by querying the system:

    Environment.getExternalStorageDirectory();
    
  2. You have to inform Android that your application needs to write to external storage by adding a uses-permission entry in the AndroidManifest.xml file:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  3. If this directory already exists, then mkdir is going to return false. So check for the existence of the directory, and then try creating it if it does not exist.
    In your component, use something like:

    File folder = new File(Environment.getExternalStorageDirectory() + "/map");
    boolean success = true;
    if (!folder.exists()) {
        success = folder.mkdir();
    }
    if (success) {
        // Do something on success
    } else {
        // Do something else on failure 
    }
    

SeyedPooya Soofbaf's user avatar

answered Oct 4, 2010 at 8:57

Gopinath's user avatar

GopinathGopinath

13k6 gold badges36 silver badges50 bronze badges

6

I had same issue after I updated my Android phone to 6.0 (API level 23). The following solution works on me. Hopefully it helps you as well.

Please check your android version. If it is >= 6.0 (API level 23), you need to not only include

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

in your AndroidManifest.xml, but also request permission before calling mkdir(), using code such as the following that I’ve copied in here from https://developer.android.com/training/permissions/requesting.html

public static final int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE
= 1; public int mkFolder(String folderName){ // make a folder under Environment.DIRECTORY_DCIM
    String state = Environment.getExternalStorageState();
    if (!Environment.MEDIA_MOUNTED.equals(state)){
        Log.d("myAppName", "Error: external storage is unavailable");
        return 0;
    }
    if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        Log.d("myAppName", "Error: external storage is read only.");
        return 0;
    }
    Log.d("myAppName", "External storage is not read only or unavailable");

    if (ContextCompat.checkSelfPermission(this, // request permission when it is not granted. 
            Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        Log.d("myAppName", "permission:WRITE_EXTERNAL_STORAGE: NOT granted!");
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }
    File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),folderName);
    int result = 0;
    if (folder.exists()) {
        Log.d("myAppName","folder exist:"+folder.toString());
        result = 2; // folder exist
    }else{
        try {
            if (folder.mkdir()) {
                Log.d("myAppName", "folder created:" + folder.toString());
                result = 1; // folder created
            } else {
                Log.d("myAppName", "creat folder fails:" + folder.toString());
                result = 0; // creat folder fails
            }
        }catch (Exception ecp){
            ecp.printStackTrace();
        }
    }
    return result; }

@Override public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    } }

sideshowbarker's user avatar

answered Aug 1, 2016 at 8:19

8

The correct path to the sdcard is

/mnt/sdcard/

but, as answered before, you shouldn’t hardcode it. If you are on Android 2.1 or after, use

getExternalFilesDir(String type) 

Otherwise:

Environment.getExternalStorageDirectory()

Read carefully https://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Also, you’ll need to use this method or something similar

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write the media
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // We can only read the media
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} else {
    // Something else is wrong. It may be one of many other states, but all we need
    //  to know is we can neither read nor write
    mExternalStorageAvailable = mExternalStorageWriteable = false;
}

then check if you can access the sdcard. As said, read the official documentation.

Another option, maybe you need to use mkdirs instead of mkdir

file.mkdirs()

Creates the directory named by the trailing filename of this file, including the complete directory path required to create this directory.

Vadim Kotov's user avatar

Vadim Kotov

8,0648 gold badges48 silver badges62 bronze badges

answered Oct 4, 2010 at 9:43

Maragues's user avatar

MaraguesMaragues

37.8k14 gold badges94 silver badges96 bronze badges

3

Restart your Android device. Things started to work for me after I restarted the device.

answered Jul 8, 2013 at 13:16

Uriel Frankel's user avatar

Uriel FrankelUriel Frankel

14.2k8 gold badges47 silver badges69 bronze badges

2

If this is happening to you with Android 6 and compile target >= 23, don’t forget that we are now using runtime permissions. So giving permissions in the manifest is not enough anymore.

answered Mar 3, 2016 at 15:42

Kuno's user avatar

KunoKuno

3,4842 gold badges28 silver badges44 bronze badges

use mkdirs() instead of mkdir()..it worked for me :)

File folder = new File(Environment.getExternalStorageDirectory()+"/Saved CGPA");
if(!folder.exists()){
    if(folder.mkdirs())
    Toast.makeText(this, "New Folder Created", Toast.LENGTH_SHORT).show();
}

File sdCardFile = new File(Environment.getExternalStorageDirectory()+"/Saved CGPA/cgpa.html");

answered Oct 30, 2013 at 18:10

Bala Vishnu's user avatar

Bala VishnuBala Vishnu

2,58823 silver badges20 bronze badges

in android api >= 23

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

instead of

    <app:uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

answered Dec 27, 2016 at 21:10

Vahe Gharibyan's user avatar

Vahe GharibyanVahe Gharibyan

5,1774 gold badges36 silver badges47 bronze badges

0

Isn’t it already created ? Mkdir returns false if the folder already exists too
mkdir

answered Oct 4, 2010 at 8:48

fedj's user avatar

fedjfedj

3,4321 gold badge21 silver badges21 bronze badges

There are Many Things You Need to worry about
1.If you are using Android Bellow Marshmallow then you have to set permesions in Manifest File.
2. If you are using later Version of Android means from Marshmallow to Oreo now
Either you have to go to the App Info and Set there manually App permission for Storage.
if you want to Set it at Run Time you can do that by below code

public  boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
    if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED) {
        Log.v(TAG,"Permission is granted");
        return true;
    } else {

        Log.v(TAG,"Permission is revoked");
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        return false;
    }
}
else { //permission is automatically granted on sdk<23 upon installation
    Log.v(TAG,"Permission is granted");
    return true;
}

}

answered May 15, 2018 at 11:39

Nadeem Bhat's user avatar

Nadeem BhatNadeem Bhat

1,0227 silver badges10 bronze badges

File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
        + "/FoderName");
if (!f.exists()) {
    f.mkdirs();
}

answered Aug 9, 2015 at 8:44

ashvin sapariya's user avatar

I made the mistake of including both:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

and:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

in the above order. So when I took out the second permission, (READ), the problem went away.

honk's user avatar

honk

9,05711 gold badges74 silver badges83 bronze badges

answered Jan 31, 2014 at 15:22

user2638345's user avatar

1

If the error happens with Android 6.0 and API >=23 ; Giving permission in the AndroidManifest.xml is not alone enough.

You have to give runtime permissions, you can refer more here
Runtime Permission

                       (or)

Google has a new feature on Android Q: filtered view for external storage. A quick fix for that is to add this code in the AndroidManifest.xml file:

<manifest ... >
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true">
     ...
     ...
    </application>
</manifest>

You can read more about it here: https://developer.android.com/training/data-storage/compatibility


Internal Storage vs Seconday Storage

The internal storage is referred to as «external storage» in the API ; not the «secondary storage»

Environment.getExternalStorageDirectory();

As mentioned in the Environment Documentation

answered Apr 7, 2021 at 16:24

Saravanan's user avatar

Android не удалось создать папку

Вот причины, по которым я столкнулся

1. Нет приложения разрешения, это очень просто, добавьте приложение разрешения в файл manifect.xml

<uses-permission android:name=»android.permission.READ_EXTERNAL_STORAGE» />
<uses-permission android:name=»android.permission.WRITE_EXTERNAL_STORAGE» />
 

2. Версия Android выше 6.0, после 6.0 многим мобильным телефонам необходимо динамически запрашивать разрешения. Недостаточно настроить это в файле.

    // Разрешение динамического приложения
    private void getPrimission() {
        PackageManager pm = getPackageManager();
        boolean permission = (PackageManager.PERMISSION_GRANTED ==
                pm.checkPermission("android.permission.CAMERA", "com.zhengyuan.emcarsend"));
        if (permission) {
                         // "Есть это разрешение"
        } else {
                         // «Нет такого разрешения»
                         // Если версия Android больше или равна 6.0, разрешение необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 15);
            }
        }
        permission = PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", "com.zhengyuan.emcarsend");
        if (permission) {
                         // "Есть это разрешение"
                         //Toast.makeText(Carout.this, "имеет разрешение", Toast.LENGTH_SHORT) .show ();
        } else {
                         // "Дерево имеет это разрешение"
                         // Если версия Android больше или равна 6.0, разрешения необходимо применять динамически
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 15);
            }
        }
    }

В приведенном выше примере есть разрешения на чтение и запись для камеры и места для хранения.

3. Иногда создание папки не удается, даже если вы запрашиваете разрешение. Это может быть создание нескольких уровней каталогов одновременно. Android не поддерживает это. Вы можете попробовать создать каталог первого уровня.

Кстати,

Я столкнулся с этой проблемой, когда делал снимки. Я продолжал снимать и не мог создавать папки.

Одна из причин — создание многоуровневых каталогов,

Другой — отчет об ошибке 7.0, доступный за пределами приложения через ClipData.Item.getUri ().

Вы можете обратиться кhttps://blog.csdn.net/qq_23179075/article/details/70314473,

На карте памяти не создаются новые папки ( почему?

В телефоне у мя стоит карта памяти. Раньше на ней всё было нормально, а ща… Новые папки не создаются, создать можно только внутри тех, которые уже есть. Старые не переименовываюся, кроме тех кормые не основные. И перенести на карту из телефона больше ниче нельзя, только если в уже созданные ранее папки. Че это? Пароль я уже и меняла, и вообще убирала. (

29 марта 2011, 01:24

7 ответов

Последний —

30 марта 2011, 11:44
Перейти

мм, такое на линуксе бывает когда доступ внезапно становиться только для админа, права доступа меняются и жизнь налаживается, если винда, то форматирование наверно единственный выход, или проверьте не переполнена ли память, нормально когда 10% свободно от общего обьема, если меньше, то могут быть проблемы

а, сори, прост всегда создание папок и перенос файлов только с ноута, тут все скачиваю и передаю, даже в голову не приходило никогда создавать прямо в телефоне все)

1234567

а, сори, прост всегда создание папок и перенос файлов только с ноута, тут все скачиваю и передаю, даже в голову не приходило никогда создавать прямо в телефоне все)

конеш, поще на компе создать и в тел перекинуть.

#android #android-studio #sd-card

#Android #android-studio #sd-карта

Вопрос:

Я знаю, что это дублирующий вопрос, но для этого нет никакого решения. Я использовал последний уровень API 24 и протестировал API 23. Мне нужно сохранить изображение на SD-карте с именем папки моего приложения, но папка не создана…

У меня есть следующий метод записи, но он не работает

     public  void actionScreenShot(View view) {

        //enable drawing cache true
        imageContainer.setDrawingCacheEnabled(true);
        imageContainer.buildDrawingCache(true);

        //create image from layout
        Bitmap bitmap = Bitmap.createBitmap(imageContainer.getDrawingCache());


        //String folder_path = getApplicationContext().getFilesDir().getPath()   "/MyAppTest/"; //It's work properly
        //String folder_path = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DCIM)   "/MyAppTest/"; //It's work properly 
        String folder_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()   "/MyAppTest"; //It's not work properly
        if (checkFile(folder_path)) {
            saveFile(new File(folder_path), bitmap);
        } else {
            File folder = new File(folder_path);
            if (folder.mkdirs()) {
                saveFile(folder, bitmap);
            } else {
                Log.d("Directory", " >> not created");
            }

        }
    }

    public void saveFile(File folder, Bitmap bitmap) {
        boolean success = false;
        try {
            File file = new File(folder, "temp.png");
            if (file.exists()) file.delete();
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            success = checkDatabase(file.getPath());
        }catch (Exception e) {
            e.printStackTrace();
        }

        if (success) {
            Log.d("FILE", "success");
        } else {
            Log.d("FILE", "not success");
        }
    }

    public boolean checkFile(String myPath) {
        boolean isExist = false;
        try {
            File file = new File(myPath);
            isExist = file.exists();
        } catch (Exception e) {

        }
        return isExist;

    }
  

Разрешение предоставляется также в AndroidManifest.xml

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  

Протоколируйте трассировку следующим образом…

 10-05 17:08:09.424 2808-2808/packagename D/Directory  >> not created
  

Если доступно какое-либо решение, помогите мне…

Спасибо….

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

1. but it not working . Пожалуйста, предоставьте более подробную информацию. Вы должны начать сообщать, создана ли папка.

2. Вы не сообщаете пользователю, если mkdirs() завершается с ошибкой. Поместите туда тост. Вам следует использовать больше инструкций log и toast, чтобы вы могли сообщить нам, что и что происходит, и что вы видите.

3. опубликуйте трассировку стека. Как насчет разрешения во время выполнения?

4. Поместите тост в каждый блок catch и отобразите в нем e.GetMessage().

5. добавлен журнал cat … на SD-карте не создана папка

Ответ №1:

вот простой код для создания папки на sdcard

 // create a File object for the parent directory
File newFolder = new File("/sdcard/newFolder/");
// have the object build the directory structure, if needed.
newFolder.mkdirs();
// create a File object for the output file
File outputFile = new File(newFolder, filename);
// now attach the OutputStream to the file object, instead of a String           
FileOutputStream fos = new FileOutputStream(outputFile);
  

разрешение в файле манифеста

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  

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

1. newFolder.mkdirs(); . Вы должны проверить возвращаемое значение, так как mkdirs может завершиться ошибкой. Отобразите всплывающее окно для пользователя, сообщающего об этом. Затем вернитесь. Тогда не продолжайте код.

2. Вы также не должны слепо вызывать mkdirs. Только если каталог не существует.

3. @greenapps это всего лишь пример кода для создания папки, это зависит от требований, когда и где я хочу создать папку

4. Нет. Вы опубликовали код с ошибкой. Я бы уволил тебя, если бы был твоим боссом ;-).

5. @greenapps я протестировал этот код, а затем опубликовал его. я уже использовал этот код раньше в своем проекте

Ответ №2:

Проблема в том, что вы используете API 23 и 24 (Marshmallow). Google изменил стратегию разрешений с API 23. Уменьшите целевую версию до 22. Это будет работать. Если вы хотите 23 или 24, затем включите код для запроса разрешения во время выполнения.

  • Ошибка создания подписи указан неправильный алгоритм 0x80090008 error code createrawsignature
  • Ошибка создания папки gta 5 rp
  • Ошибка создания подписи сертификат не найден zakupki gov ru
  • Ошибка создания открытия журнала регистрации ошибка совместного доступа к файлу
  • Ошибка создания подписи параметр задан неверно 0x80070057 суфд