Skip to content Skip to sidebar Skip to footer

Copy Image From FilePicker/Intent To Another Directory

I am trying to copy Image i receive from Intent to another directory. But I am unable to get it working yet. Need Help. My Logcat: 04-29 14:56:22.778 31620-31620/com.example.krupal

Solution 1:

This is a working code which i Have used to copy the file after clicking an image. You have to create a directory structure for it before.

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {

        switch (requestCode) {
            case CLICK_PHOTO:
                imageUri = data.getData();
                path = Utils.getRealPathFromURI(Photos.this, imageUri);
                picturePath = path.toString();

                fileName = picturePath.substring(picturePath.lastIndexOf("/") + 1);


                mFile = new File(Utils.getPath(getDIR), fileName);

                try {
                    copyFile(new File(picturePath), mFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                saveBitmapToFile(mFile);

                PhotoBeans bean = new PhotoBeans();
                bean.setThumbImageUrl(mFile.getAbsolutePath());
                bean.setIsImageSelected(false);

                arrayListPhoto.add(bean);
                adapter.notifyDataSetChanged(); //  This will try to load your new Image

                gvImages.invalidateViews(); // then you are refreshing views and setting the adapter again below

                gvImages.setAdapter(adapter);
                //Initialize Adapter

                break;

            case SELECT_PHOTO:
                imageUri = data.getData();
                path = Utils.getRealPathFromURI(Photos.this, imageUri);
                picturePath = path.toString();

                fileName = picturePath.substring(picturePath.lastIndexOf("/") + 1);

                mFile = new File(Utils.getPath(getDIR), fileName);

                try {
                    copyFile(new File(picturePath), mFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                saveBitmapToFile(mFile);

                PhotoBeans beans = new PhotoBeans();
                beans.setThumbImageUrl(mFile.getAbsolutePath());
                beans.setIsImageSelected(false);

                arrayListPhoto.add(beans);
                adapter.notifyDataSetChanged(); //  This will try to load your new Image

                gvImages.invalidateViews(); // then you are refreshing views and setting the adapter again below

                gvImages.setAdapter(adapter);
                //Initialize Adapter
                break;

        }
    }
}

CopyFile()

 private void copyFile(File sourceFile, File destFile) throws IOException {
    //Creates a copy of the existing file
    if (!sourceFile.exists()) {
        return;
    }

    FileChannel source = null;
    FileChannel destination = null;
    source = new FileInputStream(sourceFile).getChannel();
    destination = new FileOutputStream(destFile).getChannel();
    if (destination != null && source != null) {
        destination.transferFrom(source, 0, source.size());
    }
    if (source != null) {
        source.close();
    }
    if (destination != null) {
        destination.close();
    }
}

Directory Structure

   private void createDirectoryStructure() {
    try {
        createDirectory(Environment.getExternalStorageDirectory() + "", "YourDirecrtoryName");
        createDirectory(Environment.getExternalStorageDirectory() + "/" + "YourDirecrtoryName", "FolderInsideDirectory");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void createDirectory(String filePath, String directoryName) {
    try {
        File mfile= new File(filePath, directoryName);
        if (!mfile.exists()) {
            mfile.mkdirs();
            Log.e("In error", "createDirectory");
        } else {
            Log.e("In nottt error", "createDirectory");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Utils.getPath()

  public static String getPath(String getDIR) {
    String path = "";
    if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {
        path = Environment.getExternalStorageDirectory().getAbsolutePath();
    }
    if(getDIR.equalsIgnoreCase("images")) {
        return path + "/YourDirectoryName/YourDirectoryName Images";
    }else if(getDIR.equalsIgnoreCase("videos")){
        return path + "/YourDirectoryName/YourDirectoryName Videos";
    }else {
        return path + "/YourDirectoryName/YourDirectoryName Documents";
    }
}

To get the path of the image from Uri.

   public static String getRealPathFromURI(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = {MediaStore.Images.Media.DATA};
        cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        Log.e("Cursor", "" + cursor);
        if (cursor != null) {
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        else {
            return null;
        }

    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

Hope this Helps :)


Post a Comment for "Copy Image From FilePicker/Intent To Another Directory"