سؤال

يرجى الاطلاع على الكود أدناه:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

ما هو الفرق بين هاتين الطريقتين؟

متى يجب أن نستخدم PrintWriter بدلاً من BufferedWriter؟

هل كانت مفيدة؟

المحلول

ومرجع API ل <لأ href = "https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedWriter.html" يختلط = "noreferrer "> BufferedWriter و <لأ href =" https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/PrintWriter.html "يختلط =" noreferrer "> PrintWriter التفاصيل الخلافات.

والسبب الرئيسي لاستخدام PrintWriter هو للوصول إلى الطرق printXXX مثل println (). يمكنك استخدام أساسا PrintWriter إلى الكتابة إلى ملف مثلك ستستخدم System.out إلى الكتابة إلى وحدة التحكم.

وA BufferedWriter هو وسيلة فعالة لكتابة إلى ملف (أو أي شيء آخر)، كما أنه سيتم تخفيف من الشخصيات في الذاكرة جافا قبل (وربما، وهذا يتوقف على التنفيذ) انخفض إلى C للقيام الكتابة إلى الملف.

وليس هناك مثل هذا المفهوم بأنه "PrintReader". الأقرب ستحصل على الأرجح على java.util.Scanner .

نصائح أخرى

PrintWriter يعطي المزيد من الأساليب (println)، ولكن الفرق الأكثر أهمية (والمثير للقلق) الذي يجب أن تكون على دراية به هو ذلك فهو يبتلع الاستثناءات.

تستطيع الاتصال checkError لاحقًا لمعرفة ما إذا كانت هناك أي أخطاء قد حدثت، ولكن عادةً ما تستخدمها PrintWriter لأشياء مثل الكتابة إلى وحدة التحكم - أو في التطبيقات "السريعة والقذرة" حيث لا تريد أن تزعجك الاستثناءات (وحيث لا تمثل الموثوقية على المدى الطويل مشكلة).

لست متأكدًا من سبب تجميع جوانب "قدرات التنسيق الإضافية" و"عدم ابتلاع الاستثناءات" في نفس الفئة - من الواضح أن التنسيق مفيد في العديد من الأماكن التي لا تريد ابتلاع الاستثناءات.سيكون من الجميل أن نرى BufferedWriter الحصول على نفس القدرات في وقت ما.

وكما قال في إجابة TofuBeer على حد سواء لديهم تخصصاتهم. بالنسبة للاستفادة الكاملة من PrintWriter (أو أي كاتب آخر) ولكن أيضا استخدام مخزنة الكتابة يمكنك لف BufferedWriter مع واحد المطلوب من هذا القبيل:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

وPrintWriter يعرض فقط أساليب الطباعة على أي الكاتب في وضع حرف.

وBufferedWriter أكثر كفاءة مما كان، وفقا لأساليبها مخزنة. كما أنه يأتي مع طريقة السطر ()، وهذا يتوقف على منصة النظام الخاص بك، لمعالجة ملفات النص بشكل صحيح.

ووBufferedReader يسمح لقراءة النص من ملف، مع بايت تحويلها في حرفا. انها تسمح لقراءة سطرا سطرا.

وليس هناك PrintReader، عليك ان تختار تنفيذ آخر القارئ وفقا لشكل من المدخلات الخاصة بك.

كاتب الطباعة هو الكاتب الأكثر تحسينًا لكتابة بيانات الشخصية إلى ملف.

الميزة الرئيسية لـ PrintWriter مقارنة بـ FileWriter و BufferedWriter هي:

  1. يمكن لـ PrintWriter الاتصال مباشرة بالملف، كما يمكنه الاتصال عبر بعض كائنات Writer أيضًا.

PrintWriter printwriter = new PrintWriter("blah.txt");

(أو)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. يمكننا كتابة أي نوع من البيانات الأولية مباشرة إلى الملف (لأن لدينا إصدارات إضافية مثقلة من أساليب PrintWriter، مثل print() وprintln()).

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true

بشكل عام، يرسل الكاتب مخرجاته على الفور إلى الحرف الأساسي أو دفق البايت.ما لم تكن هناك حاجة إلى إخراج فوري، فمن المستحسن تغليف BufferedWriter حول أي كاتب قد تكون عمليات write() الخاصة به مكلفة، مثل FileWriters وOutputStreamWriters.على سبيل المثال،

ملحوظة:يتم تلقائيًا تغليف محتوى النص الموجود في كتل التعليمات البرمجية بالكلمات

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

سيقوم بتخزين مخرجات PrintWriter في الملف.بدون التخزين المؤقت، سيؤدي كل استدعاء لأسلوب print() إلى تحويل الأحرف إلى بايتات والتي سيتم كتابتها بعد ذلك على الفور إلى الملف، وهو ما قد يكون غير فعال للغاية.

وBufferedWriter - يكتب النص إلى تيار الطابع الإخراج، وتخفف شخصيات من تيار الحرف. تنسيق المطبوعات تمثيل الكائنات إلى دفق إخراج النص - PrintWriter.

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

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top