قراءة ملف نصي في جافا

هناك العديد من الطرق لقراءة ملف نصي في جافا. دعنا نلقي نظرة على طرق قراءة ملف نصي في جافا واحدة تلو الأخرى.

قراءة ملف نصي في جافا

هناك العديد من الطرق لقراءة ملف نصي في جافا. يتكون ملف النص من أحرف، لذا يمكننا استخدام فئات القارئ. هناك بعض فئات الأدوات أيضًا لقراءة ملف نصي في جافا.

  1. قراءة ملف نصي في جافا باستخدام فئة الملفات
  2. قراءة ملف نصي في جافا باستخدام FileReader
  3. قراءة ملف نصي في جافا باستخدام BufferedReader
  4. استخدام فئة Scanner لقراءة ملف نصي في جافا

الآن دعنا نلقي نظرة على أمثلة توضيحية تُظهر كيفية قراءة ملف نصي في جافا باستخدام هذه الفئات.

قراءة ملف نصي في جافا باستخدام java.nio.file.Files

يمكننا استخدام فئة Files لقراءة جميع محتويات الملف إلى مصفوفة بايت. تحتوي فئة Files أيضًا على طريقة لقراءة جميع الأسطر إلى قائمة من السلاسل. تم تقديم فئة Files في جافا 7 ومن المفيد استخدامها إذا كنت ترغب في تحميل جميع محتويات الملف. يجب عليك استخدام هذه الطريقة فقط عند العمل على ملفات صغيرة وعندما تحتاج إلى جميع محتويات الملف في الذاكرة.

String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);

قراءة ملف نصي في جافا باستخدام java.io.FileReader

يمكنك استخدام FileReader للحصول على BufferedReader ومن ثم قراءة الملفات سطرًا بسطر. FileReader لا يدعم الترميز ويعمل بالترميز الافتراضي للنظام، لذا ليست طريقة فعالة جدًا لقراءة ملف نصي في جافا.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
    // معالجة السطر
    System.out.println(line);
}

قراءة ملف نصي في جافا باستخدام java.io.BufferedReader

BufferedReader جيد إذا كنت ترغب في قراءة الملف سطراً بسطر ومعالجته. إنه جيد لمعالجة الملف الكبير ويدعم الترميز أيضًا. BufferedReader متزامن، لذلك يمكن القيام بعمليات القراءة على BufferedReader بشكل آمن من خلال عدة خيوط. حجم الفهرس الافتراضي لـ BufferedReader هو 8 كيلوبايت.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);

String line;
while((line = br.readLine()) != null){
     // معالجة السطر
     System.out.println(line);
}
br.close();

استخدام ماسح ضوئي لقراءة ملف نصي في جافا

إذا كنت ترغب في قراءة الملف سطراً بسطر أو استنادًا إلى بعض تعبيرات جافا العادية، فإن Scanner هو الفئة المستخدمة. يقسم الماسح الضوئي إدخاله إلى رموز باستخدام نمط فاصل، الذي يطابق الفراغات البيضاء افتراضيًا. يمكن تحويل الرموز الناتجة بعد ذلك إلى قيم مختلفة باستخدام طرق الـ next المختلفة. فئة الماسح الضوئي غير متزامنة وبالتالي ليست آمنة في الخيوط.

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
// قراءة السطر بواحد
while(scanner.hasNextLine()){
    // معالجة كل سطر
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();

مثال قراءة ملف جافا

فيما يلي فئة المثال التي تظهر كيفية قراءة ملف نصي في جافا. تستخدم الطرق المثالية Scanner و Files و BufferedReader مع دعم الترميز وFileReader.

package com.journaldev.files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class JavaReadFile {

    public static void main(String[] args) throws IOException {
        String fileName = "/Users/pankaj/source.txt";
        
        //استخدام فئة Files في Java 7 لمعالجة الملفات الصغيرة والحصول على بيانات الملف الكاملة
        readUsingFiles(fileName);
        
        //استخدام فئة Scanner لمعالجة الملفات الكبيرة، لقراءة السطر بالسطر
        readUsingScanner(fileName);
        
        //قراءة باستخدام BufferedReader، لقراءة السطر بالسطر
        readUsingBufferedReader(fileName);
        readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
        readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
        
        //قراءة باستخدام FileReader، بدون دعم الترميز، غير فعال
        readUsingFileReader(fileName);
    }

    private static void readUsingFileReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Reading text file using FileReader");
        while((line = br.readLine()) != null){
            //معالجة السطر
            System.out.println(line);
        }
        br.close();
        fr.close();
        
    }

    private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
        File file = new File(fileName);
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, cs);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.println("Read text file using InputStreamReader");
        while((line = br.readLine()) != null){
            //معالجة السطر
            System.out.println(line);
        }
        br.close();
        
    }

    private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
        Path path = Paths.get(fileName);
        BufferedReader br = Files.newBufferedReader(path, cs);
        String line;
        System.out.println("Read text file using BufferedReader Java 7 improvement");
        while((line = br.readLine()) != null){
            //معالجة السطر
            System.out.println(line);
        }
        br.close();
    }

    private static void readUsingBufferedReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Read text file using BufferedReader");
        while((line = br.readLine()) != null){
            //معالجة السطر
            System.out.println(line);
        }
        //إغلاق الموارد
        br.close();
        fr.close();
    }

    private static void readUsingScanner(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        Scanner scanner = new Scanner(path);
        System.out.println("Read text file using Scanner");
        //قراءة السطر بالسطر
        while(scanner.hasNextLine()){
            //معالجة كل سطر
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }

    private static void readUsingFiles(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        //قراءة الملف إلى مصفوفة بايت
        byte[] bytes = Files.readAllBytes(path);
        System.out.println("Read text file using Files class");
        //قراءة الملف إلى قائمة سلسلة نصية
        @SuppressWarnings("unused")
		List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
        System.out.println(new String(bytes));
    }

}

اختيار استخدام Scanner أو BufferedReader أو Files لقراءة الملف يعتمد على متطلبات مشروعك. على سبيل المثال، إذا كنت مجرد تسجيل الملف، يمكنك استخدام Files و BufferedReader. إذا كنت تبحث عن تحليل الملف استنادًا إلى فاصلة، يجب عليك استخدام فئة Scanner. قبل أن أنهي هذا البرنامج التعليمي، أريد أن أذكر حول RandomAccessFile. يمكننا استخدام هذا لقراءة ملف نصي في جافا.

RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;

while ((str = file.readLine()) != null) {
	System.out.println(str);
}
file.close();

هذا كل شيء بالنسبة لأمثلة برامج قراءة ملفات النص في جافا.

Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file