Созданная папка не отображается в проводнике..

у меня проблема с созданием папки и файла на sdcard.

вот код:

    File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/folder");
    boolean success;
    if (!folder.exists()) {
        success = folder.mkdirs();
    }
    File obdt = new File(folder, "file.txt");
    try {
        success = obdt.createNewFile();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

С помощью этого кода я ожидаю создать папкуfolder на Download папка sdcard и в этом файле file. Я хочу, чтобы пользователь мог получить доступ к файлу. Поэтому я хочу поместить его в общую папку.
The success переменная true и когда я снова запускаю код, папка уже существует и не входит в блок if.
Но я не могу увидеть созданную папку и файл на sdcard в проводнике.

Info:getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() возвращает storage/sdcard/Download

Я работаю с Galaxy Nexus.

7 ответов


черт! :)

теперь я решил свою проблему...Я неправильно понял операцию создания файлов в файловой системе.
Когда я говорил о проводнике файлов, я имел в виду проводник файлов операционной системы, а не проводник файлов в DDMS :).
Я думал, что при создании файла я увижу его в проводнике операционной системы, но когда устройство подключено к ПК, файлы можно увидеть только в проводнике файлов DDMS.
Извините, я новичок в Android ;)

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

Спасибо за помощь


любые ошибки от logcat?
Еще: попробуйте что-то вроде журнала.I ("путь", папка.absolutePath ()); а затем посмотрите в своем logcat, чтобы убедиться, где вы создаете папку, где вы думаете, что это.


Если вы еще не сделали этого, вам нужно будет дать вашему приложению правильное разрешение на запись на SD-карту, добавив строку ниже в манифест:

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

Если вы уже сделали это, посмотрите, если:

File obdt = new File(/sdcard/folder/file.txt)
try {
    success = obdt.createNewFile();
} catch (IOException e1) {
    e1.printStackTrace();
}

строительство.


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

MediaScanner

Триггер MediaScanner


попробуйте это.

        File dir = new File(Environment.getExternalStorageDirectory()
                + "/XXX/Wallpapers/");
        File[] files = dir.listFiles();

        if (files == null)

        {
            int numberOfImages = 0;
            BitmapDrawable drawable = (BitmapDrawable) imageView
                    .getDrawable();
            Bitmap bitmap = drawable.getBitmap();
            File sdCardDirectory = Environment
                    .getExternalStorageDirectory();
            new File(sdCardDirectory + "/XXX/Wallpapers/").mkdirs();
            File image = new File(sdCardDirectory
                    + "/XXX/Wallpapers/Sample" + numberOfImages + ".JPG");

            boolean success = false;
            FileOutputStream outStream;
            try {
                outStream = new FileOutputStream(image);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                outStream.flush();
                outStream.close();
                success = true;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }
            if (success) {
                Toast.makeText(
                        getApplicationContext(),
                        "Image saved successfully in Sdcard/XXX/Wallpapers",
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Error during image saving", Toast.LENGTH_LONG)
                        .show();
            }

Не забудьте добавить разрешение в манифест

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

по-видимому, есть известная ошибка в MTP.

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

Он на самом деле так же стар, как 2012


я столкнулся с той же проблемой: созданные файлы и папки не отображаются сразу после записи на sdcard, несмотря на то, что файл очищен и закрыт !!

они не отображаются на вашем компьютере через USB или проводник файлов на телефоне.

я заметил три вещи:

  1. если абсолютный путь файла начинается с /storage/emulated/0/ это не означает, что это будет на вашей sdcard - это может быть на вашем основном хранилище вместо.
  2. если вы ждете около 5 минут, файлы начинают отображаться через USB (т. е. проводник Windows и встроенный проводник файлов)
  3. если вы используете adb shell ls /sdcard из терминала, тогда файл показывает! вы могли бы использовать adb pull ... чтобы получить файл немедленно. Вероятно, вы также можете использовать DDMS.

код, который я использовал:

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileOutputStream os = new FileOutputStream(newFile);
            os.write(json.getBytes());
            os.flush();
            os.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

и

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileWriter fw = new FileWriter(newFile);
            fw.write(json);
            fw.flush();
            fw.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

почему это так? Похоже, еще один из этих " Android-измов" что вы должны страдать в первый раз, когда испытываете это.