آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره ی کلاس در فایل (آموزش)

Amir  7 سال پیش  7 سال پیش
+4 0

به نام خدا

با سلام

فرض کنید که یه JSON از سرور گرفتید و می خواید ذخیرش کنید. یه راهش اینه که تک تک عناصرشو با حلقه ی for بخونید و توی دیتابیس ذخیره کنید و یه راه دیگم داره و اونم اینه که خیلی راحت با یه کد ساده این JSON رو دست نخورده توی یک فایل ذخیره کنید و هر وقت خواستید بخونیدش. یا اینکه یه آرایه رو دارید و می خواید  که مقداریش ذخیره بشه تا دفعه ی بعدی که برنامه رو باز کردید همون مقادیر رو داشته باشه که استفاده از SharedPreferences در این مورد غیر ممکنه چون ممکنه تعداد عناصرش زیاد باشه و همینطور ذخیرش توی دیتابیس و بعد خوندنش یه مقدار پیچیده میشه.

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Amir  7 سال پیش
+2 0

توجه کنید که من یه آرایه رو ذخیره می کنم اما شما می تونید هر کلاسی رو ذخیره کنید.

اول از همه پرمیشن زیر رو به منیفست اضافه کنید:

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

فرض کنید که آرایه ی زیر رو دارید و می خواید توی فایل ذخیرش کنید:

ArrayList<String> names = new ArrayList<String>();

اول از همه باید با کد زیر فایل رو بسازید. کد "/storage/sdcard0/file.sav" میاد فایل رو توی حافظه داخلی میسازه اما شما می تونید مسیرشو تغییر بدید. پسوند فایل رو من sav. گذاشتم اما شما می تونید هر چی که خواستید بزارید. توجه کنید که این پسوند اختصاصی و الکیه و معنی نداره.

ObjectOutputStream outStream = new ObjectOutputStream(new FileOutputStream("/storage/sdcard0/file.sav"));

حالا نوبت به این میرسه که آرایه رو ذخیره کنید. برای این کار با کد زیر می تونید این کارو بکنید:

outStream.writeObject(names);

تموم شد. با کد زیر هم می تونید بخونیدش. توجه کنید به جای "/storage/sdcard0/file.sav" مسیر فایل رو بدید:

ArrayList<String> names = null;

ObjectInputStream inStream = new ObjectInputStream(new FileInputStream("/storage/sdcard0/file.sav"));
try {
    names = (ArrayList<String>) inStream.readObject();
}
catch (ClassNotFoundException e) {
    e.printStackTrace();
}

الآن آرایه ی names آرایه ای که ذخیره کردید رو دربر داره.

کدهای اصلی همینا بودن اما به خاطر این که استریم ها بسته بشن باید کدها توی try catch قرار بگیرن و تغییرات جزئی داشته باشن که کد کاملش رو هم میزارم.

ذخیره ی آرایه:

ArrayList<String> names = new ArrayList<String>();

ObjectOutputStream outStream = null;
try {
    outStream = new ObjectOutputStream(new FileOutputStream("/storage/sdcard0/file.sav"));
    outStream.writeObject(names);
}
catch (FileNotFoundException e) {
    e.printStackTrace();
}
catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        outStream.flush();
        outStream.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

خوندن آرایه:

ArrayList<String> names = null;

ObjectInputStream inStream = null;
try {
    inStream = new ObjectInputStream(new FileInputStream("/storage/sdcard0/file.sav"));
    try {
        names = (ArrayList<String>) inStream.readObject();
     }
     catch (ClassNotFoundException e) {
         e.printStackTrace();
     }
}
catch (StreamCorruptedException e) {
    e.printStackTrace();
}
catch (FileNotFoundException e) {
    e.printStackTrace();
}
catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        inStream.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
پاسخ به سوال 
Amir  7 سال پیش
+1 0

اگرم خواستید چند تا کلاس رو ذخیره کنید مثلا دو تا آرایه:

ArrayList<String> names = new ArrayList<String>();
ArrayList<String> families = new ArrayList<String>();

outStream.writeObject(names);
outStream.writeObject(families);

برای خوندنشم (توجه داشته باشید باید به ترتیب بخونید):

ArrayList<String> names = (ArrayList<String>) inStream.readObject();
ArrayList<String> families = (ArrayList<String>) inStream.readObject();

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .