الخميس، 2 يناير 2020

التعامل مع ملفات الإدخال والإخراج في جافا Java Files and I/O

التعامل مع ملفات الإدخال والإخراج في جافا 

Java Files and I/O

التعامل مع ملفات الإدخال والإخراج في جافا Java  Files and I/O

الصورة من موقع 
https://csveda.com/java/java-i-o-streams/

التعامل مع ملفات الإدخال والإخراج في جافا Java Files and I/O

تحتوي حزمة java.io على كل فئة تقريبًا قد تحتاجها من أي وقت مضى لأداء المدخلات والمخرجات (I / O) في Java. كل هذه التدفقات تمثل مصدر دخل ووجهة مخرجات. يدعم التدفق في حزمة java.io العديد من البيانات مثل البدائية ، الكائن ، الأحرف المترجمة ، إلخ.

التدفق Stream

يمكن تعريف التدفق كسلسلة من البيانات. هناك نوعان من الجداول -
  • InPutStream − يتم استخدام InputStream لقراءة البيانات من مصدر.
  • OutPutStream −يتم استخدام OutputStream لكتابة البيانات إلى وجهة. 
التعامل مع ملفات الإدخال والإخراج في جافا Java  Files and I/O


 تدفقات البايت توفر  Java دعمًا قويًا ومرنًا للإدخال / الإخراج المرتبط بالملفات والشبكات ، لكن هذا البرنامج التعليمي يغطي الوظائف الأساسية جدًا المتعلقة بالتيارات و I / O. سنرى الأمثلة الأكثر استخدامًا واحدة تلو الأخرى -
 يتم استخدام تدفقات بايت Java لتنفيذ المدخلات والمخرجات من 8 بت بايت. على الرغم من وجود العديد من الفئات المرتبطة بتدفقات البايت ولكن الفئات الأكثر استخدامًا هي FileInputStream و FileOutputStream. فيما يلي مثال يستخدم هاتين الفئتين لنسخ ملف إدخال إلى ملف إخراج -
مثال Example
import java.io.*;
public class CopyFile {
 public static void main(String args[]) throws IOException {
 FileInputStream in = null;
 FileOutputStream out = null;
 try {
 in = new FileInputStream("input.txt");
 out = new FileOutputStream("output.txt");
 int c;
 while ((c = in.read()) != -1) {
 out.write(c);
 }
 }finally {
 if (in != null) {
 in.close();
 }
 if (out != null) {
 out.close();
 }
 }
 }
}
الآن ، دعنا نقوم بإنشاء ملف إدخال.t.txt بالمحتوى التالي -
This is test for copy file.
كخطوة تالية ، قم بترجمة البرنامج أعلاه وتنفيذه ، مما سيؤدي إلى إنشاء ملف output.txt بنفس المحتوى الموجود في input.txt. لذلكسوف  نضع الكود أعلاه في ملف CopyFile.java وننفذ ما يلي -
$javac CopyFile.java
$java CopyFile

التدفقات الحرفية Character Streams

يتم استخدام تدفقات Java Byte لتنفيذ المدخلات والمخرجات من 8 بت بايت ، في حين تستخدم تدفقات Java Character لأداء المدخلات والمخرجات لليونيكود 16 بت. على الرغم من وجود العديد من الفئات المرتبطة بتدفقات الأحرف ولكن الفئات الأكثر استخدامًا هي FileReader و FileWriter. على الرغم من أن FileReader داخليًا يستخدم FileInputStream ، يستخدم FileWriter FileOutputStream ، ولكن الاختلاف الرئيسي هنا هو أن FileReader يقرأ وحدتي بايت في كل مرة ويكتب FileWriter وحدتي بايت في كل مرة.
 يمكننا إعادة كتابة المثال أعلاه ، والذي يجعل استخدام هاتين الفئتين لنسخ ملف إدخال (به أحرف يونيكود) في ملف مخرجات -
مثال Example
import java.io.*;
public class CopyFile {
 public static void main(String args[]) throws IOException {
 FileReader in = null;
 FileWriter out = null;
 try {
 in = new FileReader("input.txt");
 out = new FileWriter("output.txt");
 int c;
 while ((c = in.read()) != -1) {
 out.write(c);
 }
 }finally {
 if (in != null) {
 in.close();
 }
 if (out != null) {
 out.close();
 }
 }
 }
}
الآن ، دعنا ننشىء ملف إدخال.t.txt بالمحتوى التالي -
This is test for copy file.
كخطوة تالية ، قم بترجمة البرنامج أعلاه وتنفيذه ، مما سيؤدي إلى إنشاء ملف output.txt بنفس المحتوى الموجود في input.txt. لذلك دعونا نضع الكود أعلاه في ملف CopyFile.java وننفذ ما يلي -
$javac CopyFile.java
$java CopyFile

التدفقات القياسية Standard Streams

توفر جميع لغات البرمجة دعمًا للإدخال / الإخراج القياسي حيث يمكن لبرنامج المستخدم الحصول على مدخلات من لوحة المفاتيح ومن ثم إنتاج مخرجات على شاشة الكمبيوتر. إذا كنت على دراية بلغات البرمجة C أو C ++ ، فيجب أن تكون على دراية بثلاثة أجهزة قياسية STDIN و STDOUT و STDERR. وبالمثل ، توفر Java التدفقات القياسية الثلاثة التالية -
  • Standard Input − تدفق الادخال القياسي 
  •  يستخدم هذا لتغذية البيانات إلى برنامج المستخدم وعادةً ما يتم استخدام لوحة المفاتيح كدفق إدخال قياسي ويتم تمثيلها كـ System.in.
  • Standard Output − تدفق الاخرتج القياسي
  • يستخدم هذا لإخراج البيانات التي ينتجها برنامج المستخدم وعادة ما يتم استخدام شاشة الكمبيوتر لدفق الإخراج القياسي ويتم تمثيلها كـ System.out.
  • Standard Error − الخطأ القياسي
  • يستخدم هذا لإخراج بيانات الخطأ التي ينتجها برنامج المستخدم وعادةً ما يتم استخدام شاشة كمبيوتر لدفق الأخطاء القياسي ويتم تمثيلها كـ System.err.
فيما يلي برنامج بسيط ، يقوم بإنشاء InputStreamReader لقراءة دفق الإدخال القياسي حتى يكتب المستخدم "q" -
مثال Example
import java.io.*;
public class ReadConsole {
 public static void main(String args[]) throws IOException {
 InputStreamReader cin = null;
 try {
 cin = new InputStreamReader(System.in);
 System.out.println("Enter characters, 'q' to quit.");
 char c;
 do {
 c = (char) cin.read();
 System.out.print(c);
 } while(c != 'q');
 }finally {
 if (cin != null) {
 cin.close();
 }
 }
 }
}
دعنا نحفظ الكود الذي في الأعلى   في ملف ReadConsole.java ونحاول تجميعه وتنفيذه كما هو موضح في البرنامج التالي. يستمر هذا البرنامج في قراءة وإخراج نفس الأحرف حتى نضغط على "q" -
$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

ملفات القراءة والكتابة Reading and Writing Files

كما هو موضح سابقًا ، يمكن تعريف الدفق كسلسلة من البيانات. يستخدم InputStreamis لقراءة البيانات من مصدر ويتم استخدام OutputStream لكتابة البيانات إلى وجهة.
 فيما يلي تسلسل هرمي للفئات للتعامل مع تدفقات الإدخال والإخراج.
التعامل مع ملفات الإدخال والإخراج في جافا Java  Files and I/O

التدفقات الهامة هما FileInputStream و FileOutputStream ، والتي سيتم مناقشتها في هذا البرنامج التعليمي.

تدفقات قراءة الملف FileInputStream في جافا 

يستخدم هذا التدفق لقراءة البيانات من الملفات. يمكن إنشاء كائنات باستخدام الكلمة الأساسية new وهناك عدة أنواع من المشيدات المتاحة.
 يأخذ المشيد التالي اسم ملف كسلسلة لإنشاء كائن تدفق مدخلات لقراءة الملف -
InputStream f = new FileInputStream("C:/java/hello");
التالي مشيد يأخذ كائن ملف لإنشاء كائن تدفق الإدخال لقراءة الملف. أولاً نقوم بإنشاء كائن ملف باستخدام طريقة File () كما يلي -
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
بمجرد أن يكون لديك كائن InputStream في متناول اليد ، فهناك قائمة بأساليب او الدوال المساعدة التي يمكن استخدامها للقراءة للتدفق أو للقيام بعمليات أخرى على التدفق.
الرقم.الدالة والوصف
1
public void close() throws IOException{}
هذه الدالة تغلق تدفق إخراج الملف. يصدر أي موارد النظام المرتبطة بالملف. يلقي IOException.
2
protected void finalize()throws IOException {}
هه الدالة ينظف الاتصال بالملف. يضمن أن يتم استدعاء الدالة الوثيق لدفق إخراج الملف عند عدم وجود إشارات أخرى إلى هذا التدفق. يلقي IOException.
3
public int read(int r)throws IOException{}
تقرأ هذه الدالة البايت المحدد للبيانات من InputStream. إرجاع int. تقوم بإرجاع البايت التالي من البيانات وسيتم إرجاع -1 إذا كانت نهاية الملف.
4
public int read(byte[] r) throws IOException{}
تقرأ هذه الدالة بايت r.length من تدفق الإدخال في مصفوفة. إرجاع العدد الإجمالي للبايتات المقروءة. إذا كانت نهاية الملف ، فسيتم إرجاع -1.
5
public int available() throws IOException{}
يعطي عدد البايتات التي يمكن قراءتها من دفق إدخال الملف هذا. إرجاع int.
هناك تدفقات مهمة أخرى متوفرة ، لمزيد من التفاصيل ، يمكنك الرجوع إلى الروابط التالية -
  • ByteArrayInputStream
  • DataInputStream

تدفق الكتابة على الملف FileOutputStream في جافا

يستخدم FileOutputStream لإنشاء ملف وكتابة البيانات فيه. سيقوم التدفق بإنشاء ملف ، إذا لم يكن موجودًا بالفعل ، قبل فتحه للإخراج.
 فيما يلي اثنين من المشيدات التي يمكن استخدامها لإنشاء كائن FileOutputStream.
 يأخذ المشيد التالي اسم ملف كسلسلة لإنشاء كائن تدفق إدخال لكتابة الملف -
OutputStream f = new FileOutputStream("C:/java/hello") 
يتبع المشيد كائن ملف File object لإنشاء كائن تدفق إخراج لكتابة الملف. أولاً ، نقوم بإنشاء كائن ملف باستخدام طريقة File () كما يلي -
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
بمجرد أن يكون لديك كائن OutputStream في متناول اليد ، فهناك قائمة بالدوال المساعدة ، والتي يمكن استخدامها للكتابة على التدفق أو للقيام بعمليات أخرى على التدفق.
الرقم.الدالة والوصف
1
public void close() throws IOException{}
هذه الدالة تغلق تدفق إخراج الملف. يصدر أي موارد النظام المرتبطة بالملف. يلقي IOException.
2
protected void finalize()throws IOException {}
هذه الدالة ينظف الاتصال بالملف. يضمن أن يتم استدعاء الدالة الوثيق لتدفق إخراج الملف عند عدم وجود إشارات أخرى إلى هذا التدفق. يلقي IOException.
3
public void write(int w)throws IOException{}
هذه الدالة يكتب البايت المحدد لدفق الإخراج.
4
public void write(byte[] w)
يكتب بايت w.length من مصفوف البايت المذكور إلى OutputStream.
هناك تدفقات إخراج مهمة أخرى متاحة ، لمزيد من التفاصيل ، يمكنك الرجوع إلى الروابط التالية -
  • ByteArrayOutputStream
  • DataOutputStream
مثال Example
فيما يلي مثال لإظهار InputStream و OutputStream -
import java.io.*;
public class fileStreamTest {
 public static void main(String args[]) {
 try {
 byte bWrite [] = {11,21,3,40,5};
 OutputStream os = new FileOutputStream("test.txt");
 for(int x = 0; x < bWrite.length ; x++) {
 os.write( bWrite[x] ); // writes the bytes
 }
 os.close();
 InputStream is = new FileInputStream("test.txt");
 int size = is.available();
 for(int i = 0; i < size; i++) {
 System.out.print((char)is.read() + " ");
 }
 is.close();
 } catch (IOException e) {
 System.out.print("Exception");
 }
 }
}
الكود أعلاه سيخلق ملف test.txt وسيكتب الأرقام المعطاة في نسق ثنائي. الشيء نفسه سيكون الإخراج على شاشة stdout.

كيفية  التنقل بين الملفات ودالة الادخال والاخراج File Navigation and I/O

هناك عدة فئات أخرى سنتعرف عليها للتعرف على أساسيات File Navigation و I / O.
  • File Class
  • FileReader Class
  • FileWriter Class

المسارات او الادلة في جافا Directories in Java

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

كيفية انشاء مسار او مجلد Creating Directories في جافا

هناك طريقتان مفيدتان لفائدة الملفات ، والتي يمكن استخدامها لإنشاء الدلائل -
  1.  تنشئ الدالة mkdir () دليلًا ، ويعود صوابًا عند النجاح وخطأ في الفشل. يشير الفشل إلى أن المسار المحدد في كائن الملف موجود بالفعل ، أو أنه لا يمكن إنشاء الدليل لأن المسار بأكمله غير موجود حتى الآن.
  2.  تنشئ الدالة mkdirs () كلاً من الدليل وكل الوالدين للدليل.تنشيء دليل داخل دليل تذكر يقصد بالدليل اي المجلد وما يعرف بالمسار في علم الحاسوب او الدليل. 
 المثال التالي ينشئ دليل "/ tmp / user / java / bin" -
مثال Example
import java.io.File;
public class CreateDir {
 public static void main(String args[]) {
 String dirname = "/tmp/user/java/bin";
 File d = new File(dirname);
 // Create directory now.
 d.mkdirs();
 }
}
تجميع وتنفيذ التعليمات البرمجية أعلاه لإنشاء "/ tmp / user / java / bin".
 ملاحظة - تعتني Java تلقائيًا بفواصل المسار على UNIX و Windows وفقًا للاتفاقيات. إذا كنت تستخدم شرطة مائلة للأمام (/) على إصدار Windows من Java ، فسيظل المسار ثابتًا.

كيفية استعراض قائمة بالمجلدات او الملفات اي الأدلة Listing Directories

يمكنك استخدام طريقة list () التي يوفرها كائن File لسرد جميع الملفات والدلائل المتاحة في الدليل على النحو التالي -
مثال Example
import java.io.File;
public class ReadDir {
 public static void main(String[] args) {
 File file = null;
 String[] paths;
 try {
 // create new file object
 file = new File("/tmp");
 // array of files and directory
 paths = file.list();
 // for each name in the path array
 for(String path:paths) {
 // prints filename and directory name
 System.out.println(path);
 }
 } catch (Exception e) {
 // if any error occurs
 e.printStackTrace();
 }
 }
}
سيؤدي ذلك إلى الحصول على النتيجة التالية استنادًا إلى الأدلة والملفات المتوفرة في دليل / tmp الخاص بك -
 المخرجات 
test1.txt
test2.txt
ReadDir.java
ReadDir.class



اقرأ أيضا في دروس تعلم عن جافا 

  1.   ماهي المشيدات في جافا ولماذا تستخدم مع أمثلة؟ 
  2. What are the advantages and disadvantages of Java programming language cons and pros? ما هي مزايا وعيوب لغة برمجة جافا  سلبياتها وإيجابياتها ؟
  3. How is C++ different from Java? ما الفرق بين لغة جافا وسي بلص بلص؟ مقارنة
  4.   First Java Program | Hello World Example أول برنامج جافا | مثال مرحبا العالم
  5.   How a Java program is compiled and run?كيف يتم تجميع وتشغيل برنامج جافا؟
  6.  How to set path in Java? كيف تغير مسار الدليل او المجلد في مكتبة جافا
  7.   What are the Difference between JDK, JRE, and JVM? ما هو الفرق بين JDK و JRE و JVM
  8.   What is JVM (Java Virtual Machine)? ما هو JVM (آلة جافا الافتراضية)؟
  9. What is Java Development Kit and its purpose?ما هي مجموعة تطوير جافا والغرض منها؟ jdk
  10. What is Java appletما هو تطبيق جافا ابلايت ؟او التصبيق المصغر
  11.   ماهي أنواع المتغيرات في جافا What are Java Variable Types 
  12.   ما هي أنواع البيانات الأساسية في جافا Java Basic What are  Datatypes#
  13.  What is Unicode with example? Java? ما هو الترميز الموحد مع المثال؟  جافا؟
  14.  ماهي عوامل التشغيل او المشغلات  الأساسية في جافا Java Basic What are the Operators#
  15.  What are reserved keywords in Java? ما هي الكلمات الرئيسية المحجوزة في جافا؟
  16.  الجمل الشرطية ما هي أنواع صنع القرار في برمجة جافا Java Decision Making#
  17.  ما هي الجملة الشرطية اذا في جافا if statement in java
  18.  ما هي الجملة الشرطية  اذا  اذا كان   في جافا if else statement in java
  19.   ما هي الجملة الشرطية  التبديل في جافا switch statement in java
  20.   ما هي الجمل الشرطية المتداخلة او المركبة في جافا nested if statement in java
  21.   ما هي جمل التكرار أو الحلقة الدوارة في جافا Java Loop Control#
  22.   ماهي حلقة التكرار فور  وفور ايتش في برمجة جافا for loop in java#
  23.  ماهي حلقة التكرار أو الدوارة بينما في جافا while Loop in java 
  24.  What is the while loop in Java? & How do you use it? ما هي حلقة التكرار افعل... بينما في جافا 
  25.  كيفية استخدام جملة الاستمرار والمتابعة في حلقات التكرار والدوارة في جافا Continue statement in java#
  26.  What is the difference between Argument and Parameter in Java? ما الفرق بين المعلمات والمحولات في جافا


التسميات: