المفاهيم الأساسية لتيارات IO
يتم استخدام تدفقات IO لمعالجة نقل البيانات بين الأجهزة
تعمل Java على تشغيل البيانات من خلال التدفقات
يتم تقسيم الكائنات المستخدمة من قبل Java لتشغيل التدفقات إلى نوعين من التدفقات على حزم IO: تدفقات البايت وتدفقات الأحرف: تدفقات الإدخال وتدفقات الإخراج.
الفئة الأساسية التجريدية لتيارات البايت: inputStream ، OutputStream
فئة قاعدة مجردة لتيارات الأحرف: القارئ ، الكاتب
ملاحظة: أسماء الفئات الفرعية المستمدة من هذه الفئات الأربعة كلها لاحقة من أسماء الفئات الفرعية مع أسماء الفئات الأم.
على سبيل المثال: الفئة الفرعية من InputStream: FileInputStream
على سبيل المثال: الفئة الفرعية للقارئ FileReader
إذا قمت بإنشاء كائن FilewRiter ، فبمجرد تهيئة الكائن ، يجب تحديد الملف الواجب بشكل واضح ، وسيتم إنشاء الملف إلى الدليل المحدد. إذا كان هناك ملف يحمل نفس الاسم في الدليل ، فسيتم الكتابة فوقه.
العرض التوضيحي:
حزمة javase.day18 ؛ استيراد java.io.filewriter ؛ استيراد java.io.ioException ؛ الفئة العامة fileWriterDemo {public static void main (string [] args) {filewRiter fw = null ؛ حاول {fw = new filewRiter ("c: //java_test//filewritertest.txt") ؛ // استدعاء طريقة الكتابة لكتابة السلسلة إلى الدفق fw.write ("Alex Test23") ؛ // Fresh البيانات الموجودة في المخزن المؤقت في كائن الدفق fw.flush () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (fw! = null) {// أغلق مورد الدفق ، ولكن سيتم تحديث المخزن المؤقت الداخلي مرة واحدة قبل إغلاق fw.close () ؛ }}} catch (ioException e) {E.PrintStackTrace () ؛ }}}} package javase.day18 ؛ استيراد java.io.filewriter ؛ استيراد java.io.ioException ؛ الفئة العامة fileWriterDemo {public static void main (string [] args) {filewRiter fw = null ؛ حاول {fw = new filewRiter ("c: //java_test//filewritertest.txt") ؛ // استدعاء طريقة الكتابة لكتابة السلسلة إلى الدفق fw.write ("Alex Test23") ؛ // Fresh البيانات الموجودة في المخزن المؤقت في كائن الدفق fw.flush () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (fw! = null) {// أغلق مورد الدفق ، ولكن سيتم تحديث البيانات الموجودة في المخزن المؤقت الداخلي مرة واحدة قبل إغلاق fw.close () ؛ }}} catch (ioException e) {E.PrintStackTrace () ؛ }}}}اطبع رمز مصدر ملف Java لملف Java:
حزمة javase.day18 ؛ استيراد java.io.filereader ؛ استيراد java.io.ioException ؛ الفئة العامة fileReaderTest {public static void main (string [] args) {try {fileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ char [] buf = new char [1024] ؛ int num = 0 ؛ بينما ((num = fr.read (buf))! =-1) {system.out.println (سلسلة جديدة (buf ، 0 ، num)) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }}} package javase.day18 ؛ استيراد java.io.filereader ؛ استيراد java.io.ioException ؛ الفئة العامة fileReaderTest {public static void main (string [] args) {try {fileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ char [] buf = new char [1024] ؛ int num = 0 ؛ بينما ((num = fr.read (buf))! =-1) {system.out.println (سلسلة جديدة (buf ، 0 ، num)) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }}} انسخ رمز العرض التجريبي:
الطريقة المستخدمة للنسخ_1 () هي قراءة حرف وكتابة حرف.
تتمثل الطريقة المستخدمة في COPY_2 () في قراءة الأحرف في صفيف أحرف في وقت واحد وأخيراً كتابتها إلى الملف الهدف مرة أخرى.
حزمة javase.day18 ؛ استيراد java.io.filereader ؛ استيراد java.io.filewriter ؛ استيراد java.io.ioException ؛ الفئة العامة copyText {public static void main (string [] args) {try {copy_1 () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public static void copy_1 () يلقي ioException {filewRiter fw = new filewRiter ("c: //java_test//copy_systemdemo.java") ؛ FileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ int num = 0 ؛ بينما ((num = fr.read ())! =-1) {fw.write (num) ؛ } fw.close () ؛ الاب () ؛ } public static void copy_2 () يلقي ioException {filewRiter fw = new filewRiter ("c: //java_test//copy_systemdemo.java") ؛ FileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ int num = 0 ؛ char [] buf = new char [1024] ؛ بينما ((num = fr.read (buf))! =-1) {fw.write (buf ، 0 ، num) ؛ } fw.close () ؛ الاب () ؛ }} package javase.day18 ؛ استيراد java.io.filereader ؛ استيراد java.io.filewriter ؛ استيراد java.io.ioException ؛ الفئة العامة copyText {public static void main (string [] args) {try {copy_1 () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public static void copy_1 () يلقي ioException {filewRiter fw = new filewRiter ("c: //java_test//copy_systemdemo.java") ؛ FileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ int num = 0 ؛ بينما ((num = fr.read ())! =-1) {fw.write (num) ؛ } fw.close () ؛ الاب () ؛ } public static void copy_2 () يلقي ioException {filewRiter fw = new filewRiter ("c: //java_test//copy_systemdemo.java") ؛ FileReader fr = new fileReader ("c: //java_test//systemdemo.java") ؛ int num = 0 ؛ char [] buf = new char [1024] ؛ بينما ((num = fr.read (buf))! =-1) {fw.write (buf ، 0 ، num) ؛ } fw.close () ؛ الاب () ؛ }} المخزن المؤقت لتيارات الأحرف:
يؤدي ظهور المخازن المؤقتة إلى تحسين كفاءة القراءة والكتابة للبيانات.
الفصول المقابلة: BufferedWriter ، BufferedReader.
يجب دمج المخزن المؤقت مع الدفق قبل استخدامه.
يتم تعزيز وظيفة التدفق بناءً على التدفق.
القواعد الأساسية لعملية دفق IO:
1. مسح المصدر والغرض:
المصدر: دفق الإدخال ، القارئ
الغرض: OutputStream ، الكاتب
2. ما إذا كانت بيانات العملية نصًا عاديًا:
نعم: دفق الحرف رقم: دفق البايت هو: (1) عند استخدام قارئ دفق حرف الإدخال
(2) استخدم InputStream لدفق بايت الإدخال
(3) استخدم الكاتب لدفق أحرف الإخراج
(4) عند استخدام دفق بايت الإخراج
3. عندما يكون النظام واضحًا ، قم بتوضيح كائن محدد لاستخدامه:
الجهاز المصدر: الذاكرة ، القرص الثابت ، جهاز وجهة لوحة المفاتيح: الذاكرة ، القرص الثابت ، وحدة التحكم
فئة أداة التشغيل io
[1] سلسلة fileReaderStringHandle (اسم ملف السلسلة)
اقرأ الملف (المحدد بواسطة اسم الملف) في سلسلة ؛
[2] بايت [] fileReaderByTehandle (اسم ملف السلسلة)
اقرأ الملف (المحدد بواسطة Filename) في مجموعة بايت ؛
[3] void filewriterhandle (اسم ملف السلسلة ، نص السلسلة)
يكتب سلسلة (محددة بواسطة النص) إلى ملف (محدد بواسطة اسم الملف).
ioutil.java
استيراد java.io.bufferedInputStream ؛ import java.io.bufferedreader ؛ import java.io FileReader+BufferedReader (توفير طريقة القراءة) * * param filename * @regurn string */ public static string fileReaderStringHandle (string fileName) {StringBuilder sb = new StringBuilder () ؛ حاول {bufferedReader in = new BufferEdReader (New FileReader (ملف جديد (اسم ملف) .getabsolutefile ())) ؛ حاول {String s ؛ بينما ((s = in.readline ())! = null) {sb.append (s) ؛ sb.append ("/n") ؛ }} أخيرًا {in.close () ؛ }} catch (ioException e) {رمي new runTimeException (e) ؛ } return sb.toString () ؛ } / ** * استخدم fileInputStream+BufferedInputStream لمعالجة الملفات بطريقة بايت * * param filename * return byte [] * / public static byte [] fileReaderByTehandle (string filename) {byte [] data = null ؛ حاول {bufferedInputStream bf = جديد bufferedInputStream (FileInputStream جديد (اسم الملف)) ؛ جرب {data = new byte [bf.available ()] ؛ BF.READ (DATA) ؛ } أخيرًا {bf.close () ؛ }} catch (ioException e) {رمي new runTimeException (e) ؛ } إرجاع البيانات == فارغة؟ New Byte [] {}: Data ؛ } / ** * اكتب النص المحدد إلى ملف يسمى اسم FileName * * param filename * param text * / public static void filewriterhandle (اسم ملف السلسلة ، نص السلسلة) {try {printWriter out = new printWriter (ملف جديد (fileName) .getabsolutefile ()) ؛ حاول {out.print (text) ؛ } أخيرًا {out.close () ؛ }} catch (ioException e) {رمي new runTimeException (e) ؛ }} public static void main (string [] args) يلقي ioException {system.out.print (fileReadersTringHandle ("src/ioutil.java")) ؛ لـ (byte b: fileReaderBytehandle ("src/ioutil.java")) system.out.print (b) ؛ fileWriterHandle ("zj.txt" ، fileReaderStringHandle ("src/ioutil.java")) ؛ }}