3

Everytime it gives me "unable to decode stream java.io.FileNotFoundException: /: open Faild EISDIR (Is a Directory)

how I can get rid of this error .. this class was working fine in many tasks I've done !!

here's the class i'm using to get bitmaps

private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>{

    @Override
    protected HashMap<String, Object> doInBackground(HashMap<String, Object>... hm) {

        InputStream iStream=null;
        String imgUrl = (String) hm[0].get("image");
        int position = (Integer) hm[0].get("position");

        URL url;
        try {
            url = new URL(imgUrl);

            // Creating an http connection to communicate with url
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            // Getting Caching directory
            File cacheDirectory = getBaseContext().getCacheDir();

            // Temporary file to store the downloaded image
            File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+position+".png");

            // The FileOutputStream to the temporary file
            FileOutputStream fOutStream = new FileOutputStream(tmpFile);

            // Creating a bitmap from the downloaded inputstream
            Bitmap b = BitmapFactory.decodeStream(iStream);

            // Writing the bitmap to the temporary file as png file
            b.compress(Bitmap.CompressFormat.PNG,100, fOutStream);

            // Flush the FileOutputStream
            fOutStream.flush();

           //Close the FileOutputStream
           fOutStream.close();

            // Create a hashmap object to store image path and its position in the listview
            HashMap<String, Object> hmBitmap = new HashMap<String, Object>();

            // Storing the path to the temporary image file
            hmBitmap.put("photo",tmpFile.getPath());
            Log.d("photopah", tmpFile.getPath());

            // Storing the position of the image in the listview
            hmBitmap.put("position",position);

            // Returning the HashMap object containing the image path and position
            return hmBitmap;

        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
mnagy
  • 1,085
  • 1
  • 17
  • 36
  • Try using the two parameter version of creating a file- File tmpFile = new File(cacheDirectory, "wpta_"+position+".png"); This will create a file inside the directory in the first parameter. Also, check your filesystem and make sure you didn't somehow make some directories there by accident. – Gabe Sechan Feb 24 '13 at 08:58
  • I tried but it gave me same error – mnagy Feb 24 '13 at 09:43

1 Answers1

4

You properly needs to call:

tmpFile.getParentFile().mkdirs();

before you create the FileOutputStream.

See more: FileOutputStream crashes with "open failed: EISDIR (Is a directory)" error when downloading image

Community
  • 1
  • 1
Morten Holmgaard
  • 7,484
  • 8
  • 63
  • 85