Запись текстового файла на SD-карту не удалась - PullRequest
10 голосов
/ 03 января 2011

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

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

public void generateNoteOnSD(String sFileName, String sBody)
{
    try
    {
        File root = new File(Environment.getExternalStorageDirectory(), "Notes");
        if (!root.exists()) 
        {
            root.mkdirs();
        }

        File gpxfile = new File(root, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();

        Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
    }
    catch(IOException e)
    {
         e.printStackTrace();
         importError = e.getMessage();
         iError();
    }
}   

Ответы [ 5 ]

15 голосов
/ 23 февраля 2011

Этот метод можно использовать для проверки состояния карты sdCard. Измените тост диалог на ваш язык:

** Уход за MEDIA_MOUNTED_READ_ONLY. Нет необходимости писать в SDCard, и я возвращаю истину **

public static Boolean comprobarSDCard(Context mContext) {
    String auxSDCardStatus = Environment.getExternalStorageState();

    if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED))
        return true;
    else if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
        Toast.makeText(
                mContext,
                "Warning, the SDCard it's only in read mode.\nthis does not result in malfunction"
                        + " of the read aplication", Toast.LENGTH_LONG)
                .show();
        return true;
    } else if (auxSDCardStatus.equals(Environment.MEDIA_NOFS)) {
        Toast.makeText(
                mContext,
                "Error, the SDCard can be used, it has not a corret format or "
                        + "is not formated.", Toast.LENGTH_LONG)
                .show();
        return false;
    } else if (auxSDCardStatus.equals(Environment.MEDIA_REMOVED)) {
        Toast.makeText(
                mContext,
                "Error, the SDCard is not found, to use the reader you need "
                        + "insert a SDCard on the device.",
                Toast.LENGTH_LONG).show();
        return false;
    } else if (auxSDCardStatus.equals(Environment.MEDIA_SHARED)) {
        Toast.makeText(
                mContext,
                "Error, the SDCard is not mounted beacuse is using "
                        + "connected by USB. Plug out and try again.",
                Toast.LENGTH_LONG).show();
        return false;
    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTABLE)) {
        Toast.makeText(
                mContext,
                "Error, the SDCard cant be mounted.\nThe may be happend when the SDCard is corrupted "
                        + "or crashed.", Toast.LENGTH_LONG).show();
        return false;
    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTED)) {
        Toast.makeText(
                mContext,
                "Error, the SDCArd is on the device but is not mounted."
                        + "Mount it before use the app.",
                Toast.LENGTH_LONG).show();
        return false;
    }

    return true;
}
6 голосов
/ 03 января 2011

Проверяете ли вы, что внешнее хранилище доступно для записи?Если нет, попробуйте использовать ...

Environment.getExternalStorageState()

. Это сообщит вам, если SD-карта установлена, и вы также можете проверить, доступна ли она для записи.Это все, что я могу предложить на данный момент.

5 голосов
/ 18 июня 2012

Я только что узнал, что в моем случае мне не хватало добавления <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в файл манифеста.

Приветствия,

wahib

3 голосов
/ 23 мая 2011

Для всех новичков отладки на реальном устройстве через USB: не забудьте отключить USB-кабель от вашего ПК, как я сделал.Когда USB подключен, SD-карта недоступна.Счастливая запись файла ...

Это не правильно на всех телефонах / сборках ПЗУ.ПЗУ CMod7 и MIUI позволяют вам устанавливать, установлена ​​ли SD-карта или нет, когда она подключена к ПК, в зависимости от ваших настроек вышеприведенное может выполнятьсяЛучше всего проверить.

0 голосов
/ 03 января 2011

Я обычно использую PrintWriter вместо FileWriter.Я не знаю, решит ли это вашу проблему, но она более высокого уровня, поэтому может позаботиться о большем, чем простой FileWriter.

...