Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีอ่านไฟล์ใน Java

Java มีหลายวิธีในการอ่านไฟล์ แต่ละวิธีเหล่านี้เหมาะสำหรับการอ่านไฟล์ประเภทต่างๆ ในสถานการณ์ต่างๆ บางไฟล์เหมาะสำหรับอ่านไฟล์ที่ยาวกว่า บางไฟล์เหมาะสำหรับอ่านไฟล์ที่สั้นกว่า เป็นต้น

ในบทช่วยสอนนี้ เราจะใช้คลาส Java ต่อไปนี้เพื่ออ่านไฟล์

  • BufferedReader
  • ไฟล์
  • สแกนเนอร์

ตลอดบทช่วยสอน เราใช้ไฟล์ที่จัดเก็บไว้ใน src ไดเร็กทอรีที่พาธไปยังไฟล์คือ src/file.txt .

เก็บข้อความหลายบรรทัดในไฟล์นี้ก่อนดำเนินการต่อ

หมายเหตุ:คุณต้องจัดการข้อผิดพลาดอย่างถูกต้องเมื่อใช้การนำไปใช้เหล่านี้เพื่อให้เป็นไปตามแนวทางปฏิบัติการเข้ารหัสที่ดีที่สุด

การอ่านไฟล์ข้อความใน Java ด้วย BufferedReader

BufferedReader คลาสอ่านสตรีมการป้อนอักขระ มันบัฟเฟอร์อักขระในบัฟเฟอร์ด้วยขนาดเริ่มต้น 8 KB เพื่อให้กระบวนการอ่านมีประสิทธิภาพมากขึ้น หากคุณต้องการอ่านไฟล์ทีละบรรทัด การใช้ BufferedReader เป็นตัวเลือกที่ดี

BufferedReader มีประสิทธิภาพในการอ่านไฟล์ขนาดใหญ่

import java.io.*;

public class FileReaderWithBufferedReader {

    public static void main(String[] args) throws IOException{We
        String file = "src/file.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

        String curLine;
        while ((curLine = bufferedReader.readLine()) != null){
            //process the line as required
            System.out.println(curLine);
        }
        bufferedReader.close();
    }
}

readline() method คืนค่า null เมื่อถึงจุดสิ้นสุดของไฟล์

หมายเหตุ:อย่าลืมปิดไฟล์เมื่ออ่านเสร็จแล้ว

การอ่านไฟล์ที่เข้ารหัส UTF-8 ใน Java ด้วย BufferedReader

เราสามารถใช้ BufferedReader คลาสเพื่ออ่านไฟล์ที่เข้ารหัส UTF-8

คราวนี้เราส่ง InputStreamReader วัตถุเมื่อสร้าง BufferedReader ตัวอย่าง

import java.io.*;

public class EncodedFileReaderWithBufferedReader {

    public static void main(String[] args) throws IOException {
        String file = "src/fileUtf8.txt";
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

        String curLine;
        while ((curLine = bufferedReader.readLine()) != null){
            //process the line as you require
            System.out.println(curLine);
        }
    }
}

การใช้คลาสไฟล์ Java เพื่ออ่านไฟล์

Java Files คลาสที่นำมาใช้ใน Java 7 ใน Java NIO ประกอบด้วยเมธอดสแตติกที่ทำงานบนไฟล์อย่างครบถ้วน

การใช้ Files คลาส คุณสามารถอ่านเนื้อหาทั้งหมดของไฟล์ลงในอาร์เรย์ได้ ทำให้เป็นตัวเลือกที่ดีสำหรับการอ่านไฟล์ที่มีขนาดเล็กลง

มาดูกันว่าเราจะใช้คลาส Files ได้อย่างไรในทั้งสองสถานการณ์นี้

การอ่านไฟล์ขนาดเล็กใน Java ด้วยคลาสไฟล์

readAllLines() วิธีการของ Files class อนุญาตให้อ่านเนื้อหาทั้งหมดของไฟล์และจัดเก็บแต่ละบรรทัดในอาร์เรย์เป็นสตริง

คุณสามารถใช้ Path class เพื่อรับเส้นทางไปยังไฟล์ตั้งแต่ Files คลาสยอมรับ Path วัตถุของไฟล์

import java.io.IOException;
import java.nio.file.*;
import java.util.*;

public class SmallFileReaderWithFiles {

    public static void main(String[] args) throws IOException {
        String file = "src/file.txt";
        Path path = Paths.get(file);
        List<String> lines = Files.readAllLines(path);
    }
}

คุณสามารถใช้ readAllBytes() เพื่อดึงข้อมูลที่เก็บไว้ในไฟล์ไปยังอาร์เรย์ไบต์แทนอาร์เรย์สตริง

byte[] bytes = Files.readAllBytes(path);

การอ่านไฟล์ขนาดใหญ่ใน Java ด้วยคลาสไฟล์

หากคุณต้องการอ่านไฟล์ขนาดใหญ่ที่มี Files คลาส คุณสามารถใช้ newBufferedReader() วิธีการรับอินสแตนซ์ของ BufferedReader class และอ่านไฟล์ทีละบรรทัดโดยใช้ BufferedReader .

import java.io.*;
import java.nio.file.*;

public class LargeFileReaderWithFiles {

    public static void main(String[] args) throws IOException {
        String file = "src/file.txt";
        Path path = Paths.get(file);
        BufferedReader bufferedReader = Files.newBufferedReader(path);

        String curLine;
        while ((curLine = bufferedReader.readLine()) != null){
            System.out.println(curLine);
        }
        bufferedReader.close();
    }
}

การอ่านไฟล์ด้วย Files.lines()

Java 8 แนะนำวิธีการใหม่ในคลาส Files เพื่ออ่านไฟล์ทั้งหมดลงใน Stream ของสตริง

import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;

public class FileReaderWithFilesLines {

    public static void main(String[] args) throws IOException {
        String file = "src/file.txt";
        Path path = Paths.get(file);
        Stream<String> lines = Files.lines(path);

        lines.forEach(s -> System.out.println(s));
        lines.close();
    }
}

การอ่านไฟล์ข้อความใน Java ด้วยสแกนเนอร์

Scanner class แบ่งเนื้อหาของไฟล์ออกเป็นส่วน ๆ โดยใช้ตัวคั่นที่กำหนดและอ่านทีละส่วน แนวทางนี้เหมาะที่สุดสำหรับการอ่านเนื้อหาที่คั่นด้วยตัวคั่น

ตัวอย่างเช่น Scanner class เหมาะอย่างยิ่งสำหรับการอ่านรายการจำนวนเต็มที่คั่นด้วยช่องว่างสีขาวหรือรายการสตริงที่คั่นด้วยเครื่องหมายจุลภาค

ตัวคั่นเริ่มต้นของ Scanner คลาสคือช่องว่าง แต่คุณสามารถตั้งค่าตัวคั่นเป็นอักขระอื่นหรือนิพจน์ทั่วไปได้ นอกจากนี้ยังมีวิธีการต่างๆ ต่อไป เช่น next() , nextInt() , nextLine() และ nextByte() เพื่อแปลงเนื้อหาเป็นประเภทต่างๆ

import java.io.IOException;
import java.util.Scanner;
import java.io.File;

public class FileReaderWithScanner {

    public static void main(String[] args) throws IOException{
        String file = "src/file.txt";
        Scanner scanner = new Scanner(new File(file));
        scanner.useDelimiter(" ");

        while(scanner.hasNext()){
            String next = scanner.next();
            System.out.println(next);
        }
        scanner.close();
    }
}

ในตัวอย่างข้างต้น เราตั้งค่าตัวคั่นเป็นช่องว่างและใช้ next() วิธีการอ่านส่วนถัดไปของเนื้อหาที่คั่นด้วยช่องว่าง

การอ่านไฟล์ทั้งหมด

คุณสามารถใช้ Scanner class เพื่ออ่านไฟล์ทั้งหมดพร้อมกันโดยไม่ต้องวนซ้ำ คุณต้องผ่าน “\\Z” เป็นตัวคั่นสำหรับสิ่งนี้

scanner.useDelimiter("\\Z");
System.out.println(scanner.next());
scanner.close();
หมายเหตุ:คลาส Scanner จะไม่ซิงโครไนซ์ ดังนั้นจึงไม่ปลอดภัยสำหรับเธรด

บทสรุป

ดังที่คุณเห็นในบทช่วยสอนนี้ Java มีวิธีการมากมายที่คุณสามารถเลือกอ่านไฟล์ข้อความได้ตามลักษณะของงานที่คุณทำอยู่ คุณสามารถใช้ BufferedReader เพื่ออ่านไฟล์ขนาดใหญ่ทีละบรรทัด

หากคุณต้องการอ่านไฟล์ที่มีเนื้อหาคั่นด้วยตัวคั่น ให้ใช้ Scanner ชั้นเรียน

นอกจากนี้ คุณสามารถใช้ Java NIO Files คลาสอ่านได้ทั้งไฟล์เล็กและใหญ่