Javaالكلاس InputStreamReader في جافا
الكلاس InputStreamReader يقرأ بيانات الملف كـ bytes و يحولهم لأحرف حسب الترميز الذي نقوم بتحديده في الكونستركتور.
الكلاس InputStreamReader يحتوي على الـ constructors المذكورين في الجدول التالي.
| الكونستركتور مع تعريفه | |
|---|---|
| 1 | public InputStreamReader(InputStream in)
ينشئ كائن نوعه InputStreamReader يستخدم الترميز الإفتراضي. |
| 2 | public InputStreamReader(InputStream in, Charset cs)
ينشئ كائن نوعه InputStreamReader يستخدم ترميز كائن الـ Charset |
| 3 | public InputStreamReader(InputStream in, CharsetDecoder dec)
ينشئ كائن نوعه InputStreamReader يستخدم ترميز كائن الـ CharsetDecoder |
| 4 | public InputStreamReader(InputStream in, String charsetName)
ينشئ كائن نوعه InputStreamReader يستخدم ترميز كائن الـ String |
بعد أن يصبح كائن الـ InputStreamReader جاهزاً, يمكنك إستخدام الكثير من الدوال الجاهزة للقراءة من الملف أو لفعل أي شيء آخر.
| الدالة مع تعريفها | |
|---|---|
| 1 | public void close() throws IOException
تغلق الـ InputStreamReader و تقطع الإتصال بين الـ Stream و أي مصدر كان متصلاً فيه. |
| 2 | public String getEncoding()
ترجع إسم الترميز المستخدم من قبل كائن الـ InputStreamReader. |
| 3 | public int read() throws IOException
في كل مرة تقرأ حرف جديد من أحرف الـ InputStreamReader و ترجعه.ترجع 1- إذا وصلت لنهاية الملف. |
| 4 | public int read(char[] cbuf, int offset, int length) throws IOException
في كل مرة تستدعى فيها تقرأ مجموعة أحرف جديدة من الـ InputStreamReader و تخزنهم في المصفوفة cbuf.المتغير offset يقصد به من أي عنصر في المصفوفة cbuf سيكتب في الـ InputStreamReader.المتغير length يقصد به كم عنصر من عناصر المصفوفة cbuf سيكتب في الـ InputStreamReader. |
مثال
في هذا المثال سنقوم بإنشاء ملف جديد و كتابة نص صغير فيه, ثم سنقوم بقراءة النص من الملف.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try { // يشير إلى الملف الذي سنكتب البيانات فيه و في حال لم يكن موجوداً, سيتم إنشاءه FileOutputStream هنا قمنا بإنشاء كائن نوعه FileOutputStream fos = new FileOutputStream("c:\\MyFiles\\test.txt"); // للكتابة في الملف OutputStreamWriter هنا قمنا بإنشاء كائن نوعه OutputStreamWriter osw = new OutputStreamWriter( fos, "UTF-16" ); // هنا قمنا بكتابة نص في الملف ثم قمنا بتفريغ الذاكرة و إغلاق الكائن المتصل بالملف osw.write("الترميز" + " UTF-16 " + "يجعلك تخزن البيانات في جميع لغات العالم"); osw.flush(); osw.close(); // يشير إلى الملف الذي ستقرأ البيانات منه FileInputStream هنا قمنا بإنشاء كائن نوعه FileInputStream fis = new FileInputStream("c:\\MyFiles\\test.txt"); // للقراءة من الملف InputStreamReader هنا قمنا بإنشاء كائن نوعه InputStreamReader isr = new InputStreamReader( fis, "UTF-16" ); // هنا قمنا بإنشاء حلقة تمر على جميع أحرف الملف, في كل دورة تقرأ حرف من الملف ثم تعرضه و بعدها قمنا بإغلاق الكائن المتصل بالملف int c; while ((c = isr.read()) != -1) { System.out.print((char)c); } isr.close(); } catch(IOException e) { System.out.println("There is IOException!"); } } }
سنحصل على النتيجة التالية عند التشغيل.