سورس کپی فایل از فولدر raw به حافظه خارجی در اندروید

سورس کپی فایل از فولدر raw به حافظه خارجی در اندروید

سورس کد

سورس کپی فایل از فولدر raw به حافظه خارجی در اندروید

Copy From Raw To External Stronge

فرض کنید که یک فایل دلخواه حالا هر نوع فایلی را درون پوشه raw از
پروژه اندرویدمان داشته باشیم
و بخواهیم  اون را به درون پوشه ای درون حافظه خارجی External Storage کپی کنیم.
باید چیکار کنیم خب خیلی ساده با استفاده از کد زیر این کارو میشه کرد
مثلا من در کد زیر یه فایل زیپ یا فشرده به اسم mammutsoft.zip رو در فولدری
به نام ماموت سافت در حافظه خارجی کپی میکنم

File root = android.os.Environment.getExternalStorageDirectory();
String folderName = "/ماموت سافت";
File dir = new File (root.getAbsolutePath() + folderName);
if(!dir.exists()) {
dir.mkdirs(); // build directory
}</pre>
<p style="direction: ltr;">int len;</p>

<pre>
InputStream in = getResources().openRawResource(R.raw.mammutsoft);
String filename = "mammutsoft.zip";
File f = new File(root + folderName , filename);
if(!f.exists()){
try {
OutputStream out = new FileOutputStream(f);
byte[] buffer = new byte[1024];
while((len = in.read(buffer, 0, buffer.length)) != -1){
out.write(buffer, 0, len);
}
in.close();
out.close();
} catch (FileNotFoundException e) {
//
} catch (IOException e) {
//
}
}

خب اگه الان اجرا کنید کار نمیکنه چون کد قراره یه فایل رو تو حافظه
کپی کنه باید مجوزشم داشته باشه
خب باید به پروژتون که عمل کپی رو قراره انجام بده دو مجوز زیر رو اضافه کنید

پس فایل AndroidManifest.xml برنامتون رو باز کنید و دومجوز زیر رو بهش اضافه کنید

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

مجوز اول همونطور که از اخرش پیداستWRITE_EXTERNAL_STORAGE نوشتن در حافظه خارجی
مجوز نوشتن درحافظه خارجی رو به برنامه میده از جمله ساخت پوشه کپی فایل
و مجوز دوم READ_EXTERNAL_STORAGE خوندن حافظه خارجی
مجوز خوندن محتوای حافظه رو به برنامه میده

ماموت سافت

2 پاسخ در “سورس کپی فایل از فولدر raw به حافظه خارجی در اندروید

    1. سلام برای ارسال چندین فایل یکی این که میتونید این کد رو برای هر فایل تکرار کنی یکی هم اینکه با استفاده از array list فایل هاتو به لیست اضافه کنی و در یه مسیر حافظه گوشی قرار بدی

      به این شکل

      یه استاتیک استرینگی برای مسیر تعریف میکنی با یه اررای لیست

       static String BASE_FILE = Environment.getExternalStorageDirectory()+"/Mammutsoft/";   //مسیر در حافظه خارجی
           ArrayList<String> TmpList = new ArrayList<String>(); // تعریف لیست

      سپس یه ارای لیست دیگه به شکل زیر زیر setcontentview مینویسی

      ArrayList<String> MyFiles = new ArrayList<String>();
      		//سه عکس زیر باید در فولدر assetsبرنامت باشن یا اگه یه فایل با پسوند دیگست اسمش رو با پسوندش در لیست زیر بنویس و در assetsحتما قرار بدی بدون هیچ پوشه ای
      		  MyFiles.add("aks.png");
      		    MyFiles.add("aks2.png");
      		    MyFiles.add("aks3.png");

      سپس بهش میگیم که مسیری که تغریف کردیم اگه نبود بسازش وعکس های زیر رو به لیت اضافه کن اگه هر کدوم از عکس ها نبودن به لیست جدید اضافه و کپی میشن

      File hard = new File(BASE_FILE);
      		if(!hard.exists()){
      		hard.mkdirs();}
      		// this loop to check if files already coped or not  or any file delete
      		for(int i=0;i<MyFiles.size();i++){
      		File check = new File(BASE_FILE,MyFiles.get(i));
      		if(!check.exists()){
      		TmpList.add(MyFiles.get(i)); // copy not coped items to other list 
      		}}
      		// now check if not all files copy or something remove
      		if(TmpList.size()>0){	
      		new AsyncCopy(this, BASE_FILE, TmpList).execute(""); //اینجا با کلاس که میسازیم میگیم کپی را انجام بده

      خب یه کلاس جدید به اسم AsyncCopy بساز سپس کد های زیر رو بهش اضافه کن

      public class AsyncCopy extends AsyncTask<String, String, String>{
      String savePath;
      Activity ctx;
      private ProgressDialog pDialog;
      ArrayList<String> arr;
      AsyncCopy(Activity _ctx,String _savePath,ArrayList<String> Files){
      this.ctx =  _ctx;
      this.savePath  = _savePath;
      this.arr = Files;
      }
      @Override
      protected void onPreExecute() {
      pDialog = new ProgressDialog(ctx); //با استفاده از نمایش دیالوگ کپی رو انجام میدیم 
      pDialog.setMessage("کپی محتوای دیتای بخش یک و دو بازی...\nلطفاصبر کنید!\nحداکثر سه دقیقه");
      pDialog.setIndeterminate(true);
      pDialog.setCancelable(false);
      pDialog.show();
      super.onPreExecute();
      }
      @Override
      protected String doInBackground(String... urls) {
      File f = new File(savePath);
      if(!f.exists())
      f.mkdir();
      for(int i=0;i<arr.size();i++)
      Copy(arr.get(i));
      return null;
      }
      @Override
      protected void onPostExecute(String unused) {
      Toast.makeText(ctx,"کپی باموفقیت انجام شد",Toast.LENGTH_LONG).show();
      pDialog.hide();
      }
      void Copy(String fname){
      try{
      int count;
      InputStream input= ctx.getAssets().open(fname);
      OutputStream output = new FileOutputStream(savePath+"/"+fname);
      byte data[] = new byte[1024];
      while ((count = input.read(data))>0) {
      output.write(data, 0, count);
      }
      output.flush();
      output.close();
      input.close();        
      }catch(Exception e){
      // error while copying
      }
      }
      }

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *