как сохранить растровое изображение в папке моей галереи в android?


Это мой код для сохранения изображения. Я уже упоминал имя папки, в которой я хочу сохранить изображение, чтобы оно было в галерее, но оно не работает. мое изображение сохраняется в папке "картинки" по умолчанию. Когда я отлаживаю, он показывает

Ява.Ио.Исключение filenotfoundexception: /хранение/подражания/0/MyFolderName/ААА-13:15:44/1-4-2016.jpg: открыть не удалось: ENOENT (нет такого файла или каталога)

Исключение. Он отправляется в папку catch сразу после выполнения первой строки try блок.

Помогите пожалуйста, чего мне не хватает????

Заранее благодарю вас...

    public void saveImage(Bitmap bitmap){
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/MyFolderName"); //my folder name where I want to save.
    String receiverN = receiverName.getText().toString();

    myDir.mkdirs();
    Calendar c = Calendar.getInstance();
    String month, day, year, hour, minute, second;
    month = ""+ (c.get(Calendar.MONTH)+1);
    day = "" + c.get(Calendar.DAY_OF_MONTH);
    year = "" + c.get(Calendar.YEAR);
    hour = ""+c.get(Calendar.HOUR_OF_DAY);
    minute = "" + c.get(Calendar.MINUTE);
    int seconds = c.get(Calendar.SECOND);
    if (seconds<10) second = "0"+ seconds;
    else second = ""+seconds;

    String fname = receiverN + "-" + hour + ":" + minute + ":" + second + "/"  + month + "-" + day + "-" + year +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete ();
    try {
        FileOutputStream out = new FileOutputStream(file); //from here it goes to catch block
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
        String[] paths = {file.toString()};
        String[] mimeTypes = {"/image/jpeg"};
        MediaScannerConnection.scanFile(this, paths, mimeTypes, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
1 2

1 ответ:

Несколько вещей, чтобы попробовать.

Используйте File.separator для вашего / персонажа.

Вместо преобразования внешнего каталога хранения в строку используйте его в конструкторе File.

File myDir = new File( Environment.getExternalStorageDirectory(),File.separator+"MyFolderName");

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

public static String encodeString(String string) {

        if (string != null) {
            string = string.replace("/","-");
            string = string.replace(" ","_");
            string = string.replace(":", "-");
            string = string.replace("&", "-");
        }
        return string;
    }