كيفية جعل جافا تقرأ الملفات الكبيرة جدًا باستخدام الماسح الضوئي؟

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

سؤال

أنا أستخدم الوظيفة الأساسية التالية التي قمت بنسخها من الشبكة لقراءة ملف نصي

    public void read ()
{
    File file = new File("/Users/MAK/Desktop/data.txt");
    System.out.println("Start");
    try
    {
        //
        // Create a new Scanner object which will read the data from the
        // file passed in. To check if there are more line to read from it
        // we check by calling the scanner.hasNextLine() method. We then
        // read line one by one till all line is read.
        //
        Scanner scanner = new Scanner(file);
        int lineCount = 0;
        if (scanner == null)
        {
            System.out.println("Null File");
        }
        else
        {
            System.out.println(scanner.toString());
        }
        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();

            System.out.println("Line " + lineCount +" contain : " + line);
            lineCount++;
        }
        System.out.println("End of Try Bluck");
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
        System.out.println("Exception Bluck");
    }
    System.out.println("End");
}
}

إنه يعمل بشكل جيد مع ملف متوسطة الحجم وصغيرة الحجم (والذي يحتوي على 10 إلى 20 ألف بيانات من البيانات) ومع ذلك فشلت في العمل مع ملف يحتوي على 500 ألف خط.لا أتلقى خطأ (على الأقل لا أرى أحداً).ماذا يحدث؟ماذا علي أن أفعل هنا حتى أتمكن من تجهيز مثل هذه الملفات الكبيرة؟

ملحوظة:لقد قمت بالفعل بزيادة الكومة بمقدار 2 جيجا بايت على جهاز الاختبار الذي يعمل بنظام التشغيل Windows Server 2008 بذاكرة وصول عشوائي سعتها 4 جيجا بايت.ولكن هذا لم يساعد كثيرا!

من فضلك هل يستطيع أحد أن يخبرني ماذا يجب أن أفعل هنا؟


تحديث 01

وفيما يلي الإخراج

يبدأ

java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][تطابق صالح=خطأ][بحاجة إلى إدخال=خطأ][المصدر مغلق=خطأ][تخطي=خطأ][فاصل المجموعة=\,] [فاصل عشري =.] [بادئة موجبة =] [بادئة سالبة = \Q-\E] [لاحقة موجبة =] [لاحقة سالبة =] [NaN string=\Q �\E] [سلسلة لا نهاية لها =\Q∞\E] ]

نهاية تجربة بلاك

نهاية

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

المحلول

من الأفضل استخدام BufferedReader باستخدام FileReader

نصائح أخرى

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

لا ينبغي أن تكون الذاكرة مشكلة لأنك لا تفعل أي شيء فعليًا بالسطور - فقط قم بعدها وكتابتها على وحدة التحكم.

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

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