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 คลาสอ่านได้ทั้งไฟล์เล็กและใหญ่