Search code examples
androidfilestorageexternal

Android saving file to external storage


I have a little issue with creating a directory and saving a file to it on my android application. I'm using this piece of code to do this :

String filename = "MyApp/MediaTag/MediaTag-"+objectId+".png";
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream fos;

fos = new FileOutputStream(file);
fos.write(mediaTagBuffer);
fos.flush();
fos.close();

But it's throwing an exception :

java.io.FileNotFoundException: /mnt/sdcard/MyApp/MediaCard/MediaCard-0.png (No such file or directory)

on that line : fos = new FileOutputStream(file);

If I set the filename to : "MyApp/MediaTag-"+objectId+" it's working, but If I try to create and save the file to an another directory it's throwing the exception. So any ideas what I'm doing wrong?

And another question: Is there any way to make my files private in external storage so user can't see them in gallery, only if he connect his device as Disk Drive?


Solution

  • Use this function to save your bitmap in SD card

    private void SaveImage(Bitmap finalBitmap) {
    
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/saved_images");    
         if (!myDir.exists()) {
                        myDir.mkdirs();
                    }
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ())
          file.delete (); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
    
        } catch (Exception e) {
             e.printStackTrace();
        }
    }
    

    and add this in manifest

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

    EDIT: By using this line you will be able to see saved images in the gallery view.

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                             Uri.parse("file://" + Environment.getExternalStorageDirectory())));
    

    look at this link also http://rajareddypolam.wordpress.com/?p=3&preview=true