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