# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  كسي ميتونه در مورد كار با فايل كمكم كنه راهنمايي ميخام

## miki_ir

سلام
توي سي وقتي ميخاستم مثلا اطلاعات دانش آموزو توي فايل ذخيره كنم يه استراكت تعريف مي كردم بعد استراكتو تو فايل ذخيره مي كردم وقته خوندنم به اندازه ي طول استراكت از فايل مي خوندم
حالا تو جاوا چطوري ميتونم اطلاعات يه شخص مثله نام و نام خانوادگيو ... كه فارسي هستن رو رو فايل بنويسم وبخونم 
كسي مثالي داره بتونه يك رك.ورد اطلاعات يك شخصو كه فارسي هست از فايل بخونه و تو فايل بنويسه؟
پيشاپيش سپاسگذارم

----------


## omidbizdotcom

می تونی از JAVA I/O استفاده کنی مثالاش اینجا ریخته


http://commons.apache.org/io/description.html

----------


## miki_ir

سلام من از اين كلاس استفاده كردم
اما اين جوابم نيست . كلا ميخام هر بار كاربر دكمه اي رو كليك كرد يه شي كه چهار تا رشته توش تعريف شده رو فايل ذخيره بشه و بعد شي بعدي همينطور
نهايتا بتونم اين اشياو دونه دونه بخونم و باهاشون كار كنم يا رو فايل به روزرسانيشون كنم 
دوسته من ممنون
كسي ميتونه در مورد خوندن چند شي و اينكه چطوري شي بعدي به اخر فايل اضافه بشه نه رو شي قبلي نوشته بشه كمك نميتونه بكنه؟

----------


## sina_oonline

سلام یک شی رو می تونی با serialize کردن روی فایل ذخیره و بازیابی کنی باید از کلاس های ObjectInputStream و ObjectOutputStream استفاده کنی..تو گوگل در مورد serialize کردن در جاوا سرچ کن خیلی اسونه

----------


## miki_ir

> سلام یک شی رو می تونی با serialize کردن روی فایل ذخیره و بازیابی کنی باید از کلاس های ObjectInputStream و ObjectOutputStream استفاده کنی..تو گوگل در مورد serialize کردن در جاوا سرچ کن خیلی اسونه


 باور كن اين كارو كردم و ديدم حالا نميدونم اربرد اين رابط سيريالايز چيه 
اما مشكل من چيزه ديگس
هر چي مثال هست اومده يه جا شيو نوشته
من ميخام الان شيو بنويسم
بعد فرض كن فردا هم بخام بنويسم با اين روش آيا مياد از اول فايل مينويسه شي جديدو يا از آخر فايل اگه از اول بنويسه كه اطلاعات قبلي پاك ميشه 
حالا فرض كن ده تا شي رو فايل دارم ميخام مقدار شي نهم رو بروز كنم فرض كن يه متغيير از شي نهم علي هست ميخام بكنمش رضا 
اين دو موضوع مشكلاي منه
حل من ناصر؟
 :لبخند گشاده!:

----------


## miki_ir

كسي نيس؟ مارا ياري نمايد

----------


## miki_ir

> كسي نيس؟ مارا ياري نمايد


 كسي نيس ادوستانننننننننننن

----------


## mamrez_kh

> فرض كن فردا هم بخام بنويسم با اين روش آيا مياد از اول فايل مينويسه شي جديدو يا از آخر فايل اگه از اول بنويسه كه اطلاعات قبلي پاك ميشه


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



> فرض كن ده تا شي رو فايل دارم ميخام مقدار شي نهم رو بروز كنم فرض كن يه متغيير از شي نهم علي هست ميخام بكنمش رضا


تو این جور مواقع باید با استفاده از یه فایل کمکی اطلاعات فایل اصلی را به روز بکنید، برای مثال کلیه شی های فایل اصلی تا شی مورد نظر برای تغییر (هشت شی اول) رو داخل فایل کمکی بریزید، بعد شی به روز شده نهم، و بعد شی دهم از فایل اصلی رو داخل فایل کمکی بریزید و با یک عمل پاک کردن و کپی کردن فایل کمکی رو جایگزین فایل اصلی بکنید

----------


## sina_oonline

خب هر شی رو به صورت یه فایل به صورت OBJECTNAME.X ذخیره می کنین پس فکر کنید مثلا 2 تا شی STUDENT به نام ممد و علی دارین اون وقت دو تا فایل درست میشه MAMMAD.YOU و ALI.YOU خب حالا به کمک یه واسط مثل JFILECHOOSER یا به صورت دستی هر شی رو که میخواین فایلش رو لود می کنین و هر تغییر می خواین میدین مثلا شماره دانشجویی اون دانشجو رو عوض می کنین و دوباره همون شی رو ذخیره می کنین این میشه مفهوم سریالایز کردن..واقعا بهترین و تمیز ترین راه ممکن اینه

----------


## miki_ir

> هم میتونید کاری بکنید که فایل به کل پاک بشه و از سر نوشته بشه هم میتونید کاری بکنید که شی به آخر فایل اضافه بشه
> 
> تو این جور مواقع باید با استفاده از یه فایل کمکی اطلاعات فایل اصلی را به روز بکنید، برای مثال کلیه شی های فایل اصلی تا شی مورد نظر برای تغییر (هشت شی اول) رو داخل فایل کمکی بریزید، بعد شی به روز شده نهم، و بعد شی دهم از فایل اصلی رو داخل فایل کمکی بریزید و با یک عمل پاک کردن و کپی کردن فایل کمکی رو جایگزین فایل اصلی بکنید


 خدا خيرت بده خب گفتنش با لفظ آسونه اما تو عمل خيلي بدبختي داره چطوري شيو پيدا كنم اصلا از كجا بدونم شي چندمه بعدشم كلاس دسترسي تصادفي تو حالت شي كار نمي كنه فقط بايتيه 
اي واي
راه اون دوستمونم كه نشده ببرم پيش استاد از كلاس بيرونم مي كنه براي هر نفر يه فايل درس بشه بي معناس واقعا

----------


## alirezaD1

دوست عزیز اگه اشتباه نکنم هدف شما درست کردن یک بانک اطلاعاتی هست. خوب اگه با بانک های اطلاعاتی معروف مثل mysql و ... نمی تونی کارت رو انجام بدی باید یک بانک اطلاعاتی خودت شبیه سازی کنی. برای این کار هم می تونی از الگوریتم های مربوط به طراحی بانک اطلاعاتی استفاده کنی ( توی گوگل سرچ کن)
ولی به نظر من از mysql استفاده کنید.
یه راه هم برای اینکه همه چیز رو سر هم بزنی و تحویل استادت بدی اینه :
یک کلاس مثلا با نام person درست کن به صورت زیر :
public class person implements Serializable{}

که توی این کلاس یه سری فیلد تعریف کن (مثلا فیلد نام و نام خانوادگی و ....) کلا هر کاری می خوای توی این کلاس انجام بده . فقط مواظب باش که تنها از کلاس های توی این کلاس استفاده کنی که رابط serializable رو پیاده سازی کرده باشند.

بعد یه فایل مشخص کن مثلا به نام persons.obj . که این فایل توی پوشه ی اصلی برنامه قرار داره . بعد اول اجرای برنامه این فایل رو بخون . به صورت زیر :
FileInputStream in=new FileInputStream(new File("persons.obj"));
        ObjectInputStream input=new ObjectInputStream(in);
        ArrayList persons=new ArrayList();
       
        try{
        while(true){
            Object ob=input.readObject();
            if(ob!=null){
                persons.add(ob);
            }
        }
        }catch(Exception e){}

الان یک لیست داریم که همه ی افراد داخش هستن.
هر کاری می خوای روی این اشیا انجام بده(مثلا یک فیلد رو تغییر بده یا یک نفر رو پاک کن و ....)  بعد آخر کاری همه ی اشیای توی لیست رو دوباره سیو کن.

همونطور که گفتم این روش بهینه نیست (راستیتش حوصله ی گفتن روش های بهینه تر رو ندارم چون خیلی طولانی هستن. می تونی توی گوگل سرچ کنی) ولی خوب کارت رو راه می ندازه.

----------

