تعرف على الحزمة JAVA.IO و كيفية أستخدامها

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف أحمد مناع في السبت يونيو 08, 2013 10:58 am

بسم الله الرحمن الرحيم
إخوانى الكرام أهلا وسهلا بكم ....اليوم إن شاء الله تعالى سنتعرف سويا على الحزمة java.io تلك الحزمة التى تستخدم فى معالجة البيانات فى الجافا من من قراءة و كتابة وبما أن معظم تطبيقات الجافا تتطلب معالجة المدخلات و المخرجات أذن لابد أن تتعلمها جيدا .....و إذا نظرت لتلك الحزمة ستجدها تحتوى على الكثر من الطرق و الاساليب و التى ربما تكون مربكه بعض الشىء....لدرجة انك قد تتسائل ما هو الغرض من جميع هذه الطرق؟ أي واحده منها يجب عليك أن تختارها لمهمة معينة؟.....الخ لذلك فى هذا الدرس إن شاء الله تعالى سنتعرف سويا على كل تلك الطرق و الاساليب التى تتضمنها الحزمة java.io .....

حزمة java.io تتعلق في الغالب مع قراءة البيانات الخام من مصدر وكتابة البيانات الخام إلى وجهة. المصادر الأكثر شيوعا والوجهات من البيانات التالية:

الملفات Files
الشبكات
المخازن المؤقتة في الذاكرة (مثل المصفوفات)
System.in، System.out، System.error

أذن ما قمنا بالاعلان عنه أعلاه هى المصادر التى يمكنك استخدام حزمة java.io لكتابة و قراءة البيانات منها ......تعالوا الان نتعرف على أهم الفئات والطرق و الاساليب فى الحزمة java.io من المصادر السابقة ...


اولا : التعامل مع البيانات الخام
1_ الفئة InputStream

الفئة InputStream هى الفئة الاساسية لقراءة البيانات على مستوى الحزمة وتستخدم لقراءة البيانات المستنده بوحدات البايت bytes .....و اليكم المثال التالى :

الرمز:
InputStream input = new FileInputStream("c:\\data\\input-text.txt");

int data = input.read();

while(data != -1) {

  //do something with data...

  doSomethingWithData(data);

  data = input.read();
}

input.close();


و بالنظر للكود إعلاه نجد أن الاسولب read() الخاص بالطريقة بالطريقة InputStream يقوم بإرجاع المتغير الذي يحتوي على قيمة البايت للبيانات المسنده .... و استخدمنا جملة شرطية إذا كان الاسلوب read() تساوى -1، أى ليس هناك المزيد من البيانات لقراءة في الملف نقوم بفعل شىء ما

2_ الفئة OutputStream

الفئة OutputStream الفئة هي الفئة الأساسية من جميع لطرق الاخراج فى الجافا وتشمل الفئات الفرعية لل BufferedOutputStream و FileOutputStream

OutputStream تستخدم للكتابة البيانات المستندة البيانات المستنده بوحدات البايت bytes .....و اليكم المثال التالى :


الرمز:


OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");

while(moreData) {
  int data = getMoreData();
  output.write(data);
}
output.close();



وكما ترون فى الفئتين السابقتين قد استخدمنا الطريقة الفرعية FileInputStream لقراءة ملف و الطريقة الفرعية FileOutputStream لكتابة ملف ...وتستخدم تلك الطريقتين لقراءة الملف و الكتابة مرة واحده أو دفعة واحده ....لذلك توجد طريقتين أخرتين لقراءة و كتابة الملفات عن طريق مصفوفات البيانات والتى تعتمد على قراءة وكتابة كل بايت من البيانات على حده وكما ستم ذكرهم فى البنود التالية

3_ الطريقة ByteArrayInputStream

تلك الطريقة تسمح لك لقراءة البيانات كل بايت على حده من مصفوفة byte ...واليكم مثال لقراءة ملف بسيط .

الرمز:


byte[] bytes = ... //get byte array from somewhere.

InputStream input = new ByteArrayInputStream(bytes);

int data = input.read();
while(data != -1) {
  //do something with data

  data = input.read();
}
input.close();


وكما ترون قمنا باستخدام الطريقة ByteArrayInputStream لقراءة مصفوفة البيانات التى قمنا بتعريفها فى بداية المثال ....وتلك الطريقة تسهل فى سرعة قراءة البيانات من ملف خصوصا اذا كان كبير الحجم .


4_ الطريقة ByteArrayOutputStream

تلك الطريقة تسمح لك لالتقاط و كتابة البيانات المكتوبة إلى مصفوفة بيانات هنا مثال بسيط:

الرمز:


ByteArrayOutputStream output = new ByteArrayOutputStream();

//write data to output stream

byte[] bytes = output.toByteArray();



5_ الطريقة BufferedInputStream

وتلك الطريقة تقوم بعملية التخزين المؤقت للبيانات الخاصة بك....فبدلا من قراءة بايت واحد في وقت واحد من الشبكة أو القرص، تقرأ كتلة أكبر في كل مرة.مما يؤدى الى سرعة عملية القراءة ...ويتم استخدام الكود التالى :

الرمز:


InputStream input = new BufferedInputStream(
                      new FileInputStream("c:\\data\\input-file.txt"));


ولكى تتم عملية التخزين بسرعة اكبر يجب تعيين حجم المخزن المؤقت ....وذلك عن طريق الكود التالى :

الرمز:


InputStream input = new BufferedInputStream(
                      new FileInputStream("c:\\data\\input-file.txt"),
                      8 * 1024
    );


وكما ترون يحدد المثال السابق المخزن المؤقت الداخلي ب 8 كيلو بايت.....و من الأفضل لاستخدام أحجام المخازن المؤقتة التي هي مضاعفات 1024 بايت. الذي يعمل بشكل أفضل مع معظم المدمج في التخزين المؤقت في الأقراص الصلبة وما إلى ذلك


6_ الطريقة BufferedOutputStream

تلك الطريقة توفر التخزين المؤقت لعمليات الإخراج الخاص بك. فبدلا من كتابة بايت واحد في وقت واحد إلى الشبكة أو القرص، تكتب كتلة أكبر في كل مرة. هذا هو عادة أسرع بكثير، خاصة للوصول إلى القرص وكميات البيانات الكبيرة....و يتم ذلك عن طريق الكود التالى :

الرمز:


OutputStream output = new BufferedOutputStream(
                      new FileOutputStream("c:\\data\\output-file.txt"));


وايضا يجب تحديد حجم الملف المؤقت حتى تسهل سرعة كتابة الملف بسرعة أكبر و ذلك عن طريق الكود التالى :

الرمز:


OutputStream output = new BufferedOutputStream(
                      new FileOutputStream("c:\\data\\output-file.txt"),
                  8 * 1024
);


وكما ترون يحدد المثال السابق المخزن المؤقت الداخلي ب 8 كيلو بايت.....و من الأفضل لاستخدام أحجام المخازن المؤقتة التي هي مضاعفات 1024 بايت. الذي يعمل بشكل أفضل مع معظم المدمج في التخزين المؤقت في الأقراص الصلبة وما إلى ذلك


7_ الفئة InputStreamReader

تلك الفئة يتم استخدامها مع InputStream وذلك لتحويل البايت الى أحرف و يتم استخدامها على النحو التالى :


الرمز:


InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
Reader      reader      = new InputStreamReader(inputStream);

int data = reader.read();
while(data != -1){
    char theChar = (char) data;
    data = reader.read();
}

reader.close();


8_ الفئة OutputStreamWriter

تلك الفئة يتم استخدامها مع OutputStream لتقوم بكتابة البيانات الخام بطريقة نصية و يتم استخدامها على النحو التالى :


الرمز:


OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");
Writer      writer      = new OutputStreamWriter(outputStream);

writer.write("Hello World");

writer.close();



ثانيا : التعامل مع السلاسل النصية
فى الجزئية الاولى تعرفنا على كيفية قراءة وكتابته البيانات الخام بايت و ذلك باستخدام الفئتين InputStream و OutputStream و استخدمنا بعض الفئات الاخرى لتحويل البيانات الخام الى احرف....أما فى تلك الجزئية سنتعرف على الفئات و الطرق التى تمكنا من قراءة البيانات النصية مباشرة و ذلك على النحو التالى :

1_ الفئة FileReader

فئة تجعل من الممكن قراءة محتويات ملف من الأحرف. وأنها تعمل مثل الفئة FileInputStream التى تقوم بقراءة البيانات الخام (يقرأ بايت)، في حين أن FileReader يقرأ حروف و نصوص ....و يتم استخدامة بالشكل التالى :


الرمز:


Reader reader = new FileReader("c:\\data\\input-text.txt");

int data = reader.read();
while(data != -1) {
  //do something with data...
  doSomethingWithData(data);

  data = reader.read();
}
reader.close();


2_ الفئة FileWriter

وهى الفئة التى تقوم بكتابة ملف بطريقة الاحرف و النصوص و يمكنك استخدامها بالشكل التالى :


الرمز:


Writer writer = new FileWriter("c:\\data\\output.txt");

while(moreData) {
  String data = getMoreData();
  write.write(data);
}
writer.close();



3_ الطريقة CharArrayReader

اذا كنا قد تعلمنا فى الطرق السابقة كيفية قراءة بحرف حرف ...فى اننا بأستخدام الطريقة CharArrayReader نستطيع قراءة الملفات كسلسة حروف ....و اليكم مثال بسيط ,


الرمز:


char[] chars = ... //get char array from somewhere.

Reader reader = new CharArrayReader(chars);

int data = reader.read();
while(data != -1) {
  //do something with data

  data = reader.read();
}

reader.close();


4_ الطريقة CharArrayWriter



تلك الطريقة تجعلك قادر على كتابة ملف بالأحرف و تكوين مصفوفة من نوع char ..... هنا مثال بسيط:

الرمز:


CharArrayWriter writer = new CharArrayWriter();

//write characters to writer.

char[] chars = writer.toCharArray(); 




5_الطريقة BufferedReader


الطريقة BufferedReader فئة يوفر التخزين المؤقت للفئة Reader بدلا من قراءة حرف واحد في وقت واحد من الشبكة أو القرص، تقرأ كتلة أكبر في كل مرة. هذا هو عادة أسرع بكثير، خاصة للوصول إلى القرص وكميات البيانات الكبيرة مثلها مثل الطريقة BufferedInputStream و الفرق الرئيسى بينهما ان الطريقة BufferedReader تقوم بعمل المخزن المؤقت بالاحرف او النصوص فى حين ان الطريقة BufferedInputStream تقوم بعمل المخزن المؤقت بالبايت .....و اليكم طريقة استخدام تلك الطريقة :

الرمز:


 Reader input = new BufferedReader(
                          new FileReader("c:\\data\\input-file.txt"),
                      8 * 1024
    );



6_ الطريقة BufferedWriter

الطريقة BufferedWriter فئة يوفر التخزين المؤقت للفئة Reader بدلا من كتابة حرف واحد في وقت واحد من الشبكة أو القرص، تقوم بكتابة كتلة أكبر في كل مرة. هذا هو عادة أسرع بكثير، خاصة للوصول إلى القرص وكميات البيانات الكبيرة مثلها مثل الطريقة BufferedOutputStream و الفرق الرئيسى بينهما ان الطريقة BufferedWriter تقوم بعمل المخزن المؤقت بالاحرف او النصوص فى حين ان الطريقة BufferedOutputStream تقوم بعمل المخزن المؤقت بالبايت .....و اليكم طريقة استخدام تلك الطريقة :

الرمز:
  Writer writer = new BufferedWriter(
                          new FileWriter("c:\\data\\output-file.txt"),
                  8 * 1024
);




والى هنا نكون قد انتيها من هذا الدرس و اتمنى أن اكون قد وفقت فى عرض المادة بصورة بسيطة كما يوجد عدة طرق اخرة فى هذه الحزمة لم يتم الطرق اليها

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 809
النقاط : 1478
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف لمار عادل في الأحد يونيو 09, 2013 10:19 pm

الله يكرمك اخى احمد شرح جميل جدا .....لكن عندى سؤال عن كيفية فتح ملف نصى فى المكون jtext بالنت بينز ؟



وانا شاكرة تعبك معايا

لمار عادل
..
..

تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف ذوكا في السبت يونيو 15, 2013 2:37 pm

لمار عادل كتب:الله يكرمك اخى احمد شرح جميل جدا .....لكن عندى سؤال عن كيفية فتح ملف نصى فى المكون jtext بالنت بينز ؟



وانا شاكرة تعبك معايا


http://egy-tech.forumegypt.net/t444-topic

ذوكا
.....
.....

تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 155
التقيم : 11
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف سامر الشرفا في الجمعة سبتمبر 27, 2013 9:43 pm

هناك خطأ باول سطر بآخر فئة
6_ الطريقة BufferedWriter  



Reader     يجب استبدال
Writer   ب

سامر الشرفا
..
..

تاريخ التسجيل : 01/09/2013
المساهمات : 19
النقاط : 25
التقيم : 0
الدولة : فلسطين
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف أحمد مناع في السبت سبتمبر 28, 2013 4:19 pm

أخى الكريم سامر أهلا وسهلا بكم ...فى البداية اشكرك على أهتمامك و قراءة الموضوع حتى أخره ....بالنسبة للخطأ التى تحدثت عنه ففعلا يوجد خطأ فى الشرح ولكن لو نظرت فى الكود ستجده صحيح ....

فجزاك الله خيرا على التوضيح

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 809
النقاط : 1478
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعرف على الحزمة JAVA.IO و كيفية أستخدامها

مُساهمة من طرف Mr.Kurd في الجمعة يوليو 01, 2016 7:51 am

مشكوور أخي هل يمكن لجافا قراءة ملفات بمتداد ئيكسي ....
إذا جاوبت أرس لي رسالة و خابرني...

Mr.Kurd
.
.

تاريخ التسجيل : 17/03/2016
المساهمات : 6
النقاط : 8
التقيم : 0
الدولة : العراق
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى