Ankita Bansal
Ankita Bansal

Reputation: 335

Android copy file from internal storage to external

I am trying to Copy file from internal memory card to external memory card By googling i found this answer

try {
 InputStream in = new FileInputStream("/storage/sdcard1/bluetooth/file7.zip"); // Memory card path
            File myFile = new File("/storage/sdcard/"); // 
            OutputStream out = new FileOutputStream(myFile);
              // Copy the bits from instream to outstream
              byte[] buf = new byte[1024];
              int len;
              while ((len = in.read(buf)) > 0) {
                  out.write(buf, 0, len);
              }
              in.close();
              out.close();  
              session.showToast("file copied sucessfully");
        } catch (FileNotFoundException e) {
             showToast(e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
             showToast(e.getMessage());
            e.printStackTrace();
        }

its work for internal move to internal or external storage to external but cross transferring do not work its throws an error Erofs read only file system

Upvotes: 1

Views: 4291

Answers (2)

Krupa Patel
Krupa Patel

Reputation: 3359

Try some thing like this:

 new FileAsyncTask().execute(files);

and

// AsyncTask for Background Process

private class FileAsyncTask extends AsyncTask<ArrayList<String>, Void, Void> {         
    ArrayList<String> files;         
    ProgressDialog dialog;         
    @Override         
    protected void onPreExecute() {             
        dialog = ProgressDialog.show(ActivityName.this, "Your Title", "Loading...");         
    }         
    @Override         
    protected Void doInBackground(ArrayList<String>... params) {              
        files = params[0];             
        for (int i = 0; i < files.size(); i++) {                 
            copyFileToSDCard(files.get(i));                
        }             return null;         
    }         
    @Override         
    protected void onPostExecute(Void result) {             
        dialog.dismiss();         
    }      
} 

// Function to copy file to the SDCard

public void copyFileToSDCard(String fileFrom){
    AssetManager is = this.getAssets();
    InputStream fis;
    try {

        fis = is.open(fileFrom);
        FileOutputStream fos;
        if (!APP_FILE_PATH.exists()) {
            APP_FILE_PATH.mkdirs();
        }
        fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/MyProject", fileFrom));
        byte[] b = new byte[8];
        int i;
        while ((i = fis.read(b)) != -1) {
            fos.write(b, 0, i);
        }
        fos.flush();
        fos.close();
        fis.close();
    } 
    catch (IOException e1) {
        e1.printStackTrace();
    }
}

public static boolean copyFile(String from, String to) {
try {
    int bytesum = 0;
    int byteread = 0;
    File oldfile = new File(from);
    if (oldfile.exists()) {
        InputStream inStream = new FileInputStream(from);
        FileOutputStream fs = new FileOutputStream(to);
        byte[] buffer = new byte[1444];
        while ((byteread = inStream.read(buffer)) != -1) {
            bytesum += byteread;
            fs.write(buffer, 0, byteread);
        }
        inStream.close();
        fs.close();
    }
    return true;
} catch (Exception e) {
    return false;
}
}

Upvotes: 2

Rahul Sharma
Rahul Sharma

Reputation: 6179

Try this, Replace this line:

File myFile = new File("/storage/sdcard/");

with:

ContextWrapper cw = new ContextWrapper(getApplicationContext());
     // path to /data/data/yourapp/app_data/imageDir
    File myFile = cw.getDir("imageDir", Context.MODE_PRIVATE);

Check this link, may be helpfull: click here

Upvotes: 1

Related Questions