چگونه داده های اپلیکیشن اندروید را به صورت لوکال ذخیره کنیم؟ - بخش دوم

چگونه داده های اپلیکیشن اندروید را به صورت لوکال ذخیره کنیم؟ - بخش دوم


در مطلب قبلی با نحوه ذخیره سازی اطلاعات با استفاده از جفت های کلید-مقدار و استفاده از پایگاه داده SQLite آشنایی پیدا کردید، در ادامه استفاده از حافظه داخلی و خارجی برای ذخیره سازی داده ها را شرح خواهیم داد، با ما همراه باشید.

3. استفاده از حافظه ذخیره سازی داخلی

به هر اپلیکیشن اندروید یک دایرکتوری ذخیره سازی داخلی خصوصی تخصیص داده می شود که اپلیکیشن می تواند در آن متن و فایل های باینری را ذخیره کند. فایل های درون این دایرکتوری در دسترس کاربر و یا سایر اپلیکیشن های نصب شده بر روی گوشی کاربر قرار ندارند و تنها اپلیکیشن به آنها دسترسی دارد. این فایل ها با پاک کردن اپلیکیشن از روی گوشی به طور خودکار پاک می شوند.

پیش از استفاده از دایرکتوری ذخیره سازی داخلی، باید موقعیت قرارگیری آن را مشخص کنید، برای این کار باید متد ()getFilesDir را که برای اکتیویتی ها و سرویس ها در دسترس است فراخوانی کنید.

File internalStorageDir = getFilesDir();

به منظور دریافت یک رفرنس به یک فایل داخل دایرکتوری، می توانید نام فایل را همراه با مکان قرارگیری که مشخص کرده اید ارسال نمایید، در زیر نحوه دریافت یک رفرنس به فایلی به نام alice.csv را مشاهده می کنید.

File alice = new File(internalStorageDir, "alice.csv");

از این مرحله به بعد می توانید از دانش خود درباره کلاس و متدهای I/O جاوا برای خواندن از یک فایل یا نوشتن بر روی آن بهره بگیرید. قطعه کد زیر نحوه استفاده از آبجکت FileOutputStream و متد ()write آن به منظور نوشتن در فایل را نشان می دهد:

// Create file output stream

fos = new FileOutputStream(alice);

// Write a line to the file

fos.write("Alice,25,1".getBytes());

// Close the file output stream

fos.close();

4. استفاده از حافظه ذخیره سازی خارجی

از آنجایی که ظرفیت حافظه داخلی گوشی های اندروید معمولا ثابت و در اغلب شرایط محدود نیز می باشد، بسیاری از گوشی های اندروید از رسانه های ذخیره سازی خارجی مانند SDکارت ها پشتیبانی می کنند. پیشنهاد می شود که از این گزینه ذخیره سازی برای فایل های حجیم مانند عکس ها و ویدیوها استفاده کنید.

بر خلاف حافظه داخلی، خافظه خارجی همواره در دسترس نمی باشد، از این رو لازم است همواره پیش از استفاده از آن در دسترس بودن این حاظه در گوشی را چک کنید، برای این کار از متد ()getExternalStorageState از کلاس Environment استفاده نمایید.

if(Environment.getExternalStorageState()

.equals(Environment.MEDIA_MOUNTED)) {

// External storage is usable

} else {

// External storage is not usable

// Try again later

}

زمانی که از بابت وجود حافظه مطمئن شدید، می توانید مسیر دایرکتوری ذخیره سازی خارجی برای اپلیکیشن را با استفاده از متد ()getExternalFilesDir و ارسال null به عنوان آرگومنت بگیرید، با استفاده از مسیر دایرکتوری قادر به رفرنس دادن به فایل های درون دایرکتوری می باشید، در زیر نحوه رفرنس دادن به فایلی به نام bob.jpg در دایرکتوری خارجی اپلیکیشن را مشاهده می کنید:

File bob = new File(getExternalFilesDir(null), "bob.jpg");

با درخواست از کاربر جهت اعطای مجوز WRITE_EXTERNAL_STORAGE قادر به دریافت دسترسی خواندن/نوشتن به کل سیستم فایل بر روی حافظه خارجی هستید و پس از آن می توانید از دایرکتوری های عمومی شناخته شده برای ذخیره عکس ها، فیلم ها و سایر فایل های رسانه ای استفاده کنید.

کلاس Environment دارای یک متد به نام ()getExternalStoragePublicDirectory برای تشخیص مسیرهایی این دایرکتوری های عمومی است.

برای مثال با ارسال مقدار Environment.DIRECORY_PICTURES به متد می توانید مسیر دایرکتوری عمومی که در آن قادر به ذخیره عکس ها هستید را مشخص کنید و به طور مشابه اگر مقدار Environment.DIRECTORY_MOVIES را به متد بفرستید، مسیر دایرکتوری عمومی که فیلم ها در آن ذخیره شده اند را دریافت می کنید.

در زیر نحوه رفرنس دادن به یک فایل به نام bob.jpg در دایرکتوری عمومی تصاویر را مشاهده می کنید:

File bobInPictures = new File(

Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_PICTURES),

"bob.jpg"

);

وقتی که آبجکت File را داشته باشید می توانید دوباره از کلاس های FileInputStream و FileOutputStream برای خواندن از فایل یا نوشتن بر روی آن استفاده نمایید.

جمع بندی

در این مطلب با نحوه استفاده از گزینه های ذخیره سازی لوکال که توسط SDK اندروید ارائه شده آشنایی پیدا کردید. عملیات خواندن/نوشتن در صورت درگیر بودن حجم زیادی از داده ها ممکن است زمان بر باشد و این شرایط به نوع ذخیره اطلاعات ارتباط چندانی ندارد. بنابراین جهت کسب اطمینان از اینکه ترد UI اصلی همیشه در دسترس می ماند، باید اجرای عملیات ذخیره سازی را در یک ترد متفاوت به انجام رسانید.

 

http://code.tutsplus.com برگرفته از

اینها را هم بخوانید

نظرات کاربران

  1. Armin Hourshenas
    Armin Hourshenas
    سلام امیدوارم حالتون خوبه باشه بنده به مشکلی برخوردم امیدوارم به سوالم پاسخ دهید بنده با یک شماره مجازی یه اکانت در تلگرام ساختم و این اکانت دارای اطلاعات مهمی برای من است هنگام بروز رسانی تلگرام از من ورود شماره را میخاست که متاسفانه به این شماره از قبل دسترسیم قطع شد...ولیچون من با دوتا اکانت در الگرام بودم به ان یکی وارد شدم تقریبا تنظیمات و چنل های Favorite دست نخورده باقی مانده بود یجورایی اطلاعت هستند بنظرشما میتونم به آن شماره دسترسی پیدا کنم از طریق اطلاعات موجود در تلفن؟ و اگر نمیشه ؛ من وقتی میخاهم نسخه قبلی رو نصب کنم پیغام )نصب نشد( میده چجوری میتونم این اجازه رو بدم یا تلگرامو پاک کنم که اطلاعات Data حذف نشه

    به این نظر پاسخ دهید
  2. avatar
    ریحانه فرش باف
    سلام. ممنون از مطلب مفیدتون. بعضی ا ز دوستان هستند که دوست دارن نحوه ذخیره سازی روی حافظه خارجی و تفاوت مسیردهی با حافظه داخلی رو یاد بگیرن، این آموزش میتونه کمک خوبی باشه براشون. خیلی خوب و روان ترجمه کردید. یه پیشنهاد هم داشتم، اگر زحمت میکشیدید و در ادامه همین مطلب تفاوت دسترسی به فایلهای اپلیکیشن توسط سایر اپلیکشن ها رو در دو حالت ذخیره روی حافظه داخلی و خارجی بیان میکردید خیلی عالی میشد. و مورد دیگه اینکه اگه فایلهای اپلیکیشن مون روی حافظه خارجی ذخیره بشه و بعد کاربر اپلیکیشن رو uninstall کنه، این فایلها خود به خود از حافظه خارجی پاک میشن یا خیر؟؟ ممنون.

    به این نظر پاسخ دهید
    1. واننی منصوریان
      واننی منصوریان (ادمین)
      با سلام خوشحالیم که مطلب برای شما مفید بوده. سعی میکنیم در آینده درباره موضوعاتی که فرمودید مطلب تهیه کنیم. در صورتی که فایل های اپلیکیشن روی حافظه خارجی ذخیره شوند، بعد از uninstall کردن اپلیکیشن پاک نمیشوند. موفق و پیروز باشید

      به این نظر پاسخ دهید
      1. avatar
        ریحانه فرش باف
        سلام مجدد. بسیار بسیار ممنون. متشکرم از پاسخ خلاصه ای که به سوال من دادید، البته من منظورم پیشنهاد قرار دادن این مباحث در ادامه مطلب آموزشی مفیدتون بود، نه طرح سوال. با اجازتون در تکمیل پاسخ شما برای دوستانی که این مطلب رو مطالعه میکنند ... فایل هایی که از اپلیکیشن ما روی حافظه خارجی ذخیره میشن، در واقع دو دسته هستند: عمومی (Public files) و خصوصی (Private files). که این بستگی داره به مسیری که ما برای ذخیره این فایل ها میدیم (استفاده از متد ()getExternalStoragePublicDirectory برای مسیر ذخیره فایل های عمومی یا استفاده از متد ()getExternalFilesDir برای مسیر فایل های خصوصی). فایلهای عمومی، فایل هایی هستند که وقتی کاربر اپلیکیشن شما رو پاک (uninstall) میکنه، این فایل ها باید برای کاربر در دسترس باشن. به عنوان مثال، عکس های گرفته شده توسط برنامه شما یا سایر فایل های دانلود شده. اما اون دسته از فایلها که با حذف برنامه از روی حافظه خارجی پاک میشن، فایل های خصوصی هستند که قانونا به برنامه شما تعلق دارند و هنگام حذف برنامه ی شما توسط کاربر باید حذف بشن. چون در واقع این فایلها با حذف برنامه، دیگه ارزشی برای کاربر ندارن، مثل منابع اضافه ای که توسط برنامه شما برای temporary media file ها دانلود میشن.

        به این نظر پاسخ دهید