هل من الممكن قراءة من ملف باستخدام فيليريدر فقط?

StackOverflow https://stackoverflow.com/questions/9458759

  •  13-11-2019
  •  | 
  •  

سؤال

وأنا أعلم أن النهج الصحيح هو

BufferedReader br = new BufferedReader(FileReader(file));

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

هذا هو رمز بلدي:

String lectura = "";
try{
    lectura = String.valueOf(fr.read());
} catch(IOException ioex){
    ioex.printStackTrace();
}

while((Integer.parseInt(lectura)) != -1){
    System.out.print(lectura);
    try{
        lectura = String.valueOf(fr.read());
    } catch(IOException ioex){
        ioex.printStackTrace();
    }
}
هل كانت مفيدة؟

المحلول

ما يحدث هذا -

fr.read () يعيد عددا صحيحا وليس شخصية، على الرغم من أن عدد صحيح يعد هو رمز ASCII المكافئ لهذه الشخصية.

عند استدعاء String.ValueOf () في هذا الأعداد الصحيحة، يتم استدعاء الأسلوب String.ValueOf (INT I)، بدلا من طريقة String.ValueOf (Char C) التي تتوقع أن تسميتها، وبالتالي تعودقيمة ASCII كسلسلة، بدلا من قيمة الأحرف كسلسلة.

لذلك بدلا من ذلك، حاول giveacodicetagpre.

نصائح أخرى

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

قارئ الملفات read إرجاع int.تحتاج فقط إلى إلقاء هذا على char.

السبب Readerفي read لا يعود فقط char هل هذا باستخدام ملف int يتيح لها استخدام -1 لتمثيل نهاية الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top