Đọc File Trong Java - Quyetdo289's Blog

Trong Java, có nhiều cách để đọc 1 file, bạn có thể lựa chọn cách phù hợp tùy theo mục đích.

1 . Sử dụng java.nio.file.Files : Nếu bạn muốn đọc tất cả nội dung của một file thành một mảng byte hoặc đọc tất cả các dòng thành một list thì có thể sử dụng lớp Files. Lớp Files được gới thiệu trong Java 7 và nó là cách tốt nếu bạn muốn load tất cả nội dung của file. Bạn chỉ nên sử dụng phương thức này khi làm việc với file nhỏ và cần load tất cả nội dung vào memory.

2. Sử dụng java.io.FileReader : Bạn có thể sử dụng FileReader để nhận về BufferedReader và sau đó đọc file theo từng dòng một. FileReader không hỗ trợ mã hóa và làm việc với bảng mã mặc định của hệ thống, do đó nó không phải là một cách hữu hiệu để đọc file trong Java

3. Sử dụng java.io.BufferedReader : BufferedReader là cách tốt nếu bạn muốn đọc file theo từng dòng và xử lý trên chúng. Nó phù hợp cho việc xử lý file lớn và nó cũng hỗ trợ encoding. BufferedReader là đồng bộ ( synchronized  ), do đó thao tác đọc trên một BufferedReader có thể thực hiện an toàn từ nhiều thread . BufferedReader mặc định có bộ đệm ( buffer ) kích thước 8KB.

4. Sử dụng java.util.Scanner : Nếu bạn muốn đọc file theo từng dòng và dựa vào java regular expression, Scanner là một lớp phù hợp cho việc đó. Scanner tách đầu vào của nó thành các dấu hiệu (tokens) sử dụng một mẫu tách ( delimiter pattern ), cái mà mặc định so khớp với khoảng trắng. Các tokens kết quả sau đó có thể được chuyển đổi thành giá trị của các loại khác nhau sử dụng các phương thức khác nhau tiếp theo. Scanner là không đồng bộ và vì thế không an toàn khi sử dụng multi thread.

Ví dụ sau là minh họa cách sử dụng Files, BuferedReader, Scanner ( có hỗ trợ encoding ) và FileReader ( không hỗ trợ encoding ).

package quyetdv.java.javaio.file; 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 ReadFileExample { static final String fileName = "test1.txt"; public static void main(String[] args) throws IOException { // using Java 7 Files class to process small files, get complete file data readUsingFiles(fileName); // using FileReader, no encoding support, not efficient readUsingFileReader(fileName); // using BufferedReader, to read line by line readUsingBufferedReader(fileName); readUsingBufferedReader(fileName, StandardCharsets.UTF_8); readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8); // using Scanner class for larget files, to read line by line readUsingScanner(fileName); } private static void readUsingFiles(String fileName) throws IOException { Path path = Paths.get(fileName); // read file to byte array byte[] bytes = Files.readAllBytes(path); // read file to String list List<String> allLines = Files .readAllLines(path, StandardCharsets.UTF_8); for (String line : allLines) { System.out.println(line); } } 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; while ((line = br.readLine()) != null) { // process the line 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; while ((line = br.readLine()) != null) { // process the line 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; while ((line = br.readLine()) != null) { // process the line 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; while ((line = br.readLine()) != null) { // process the line 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); // read line by line while (scanner.hasNextLine()) { // process each line String line = scanner.nextLine(); } } }

Share this:

  • Facebook
  • X
Like Loading...

Related

Từ khóa » đọc File Trong Java Dụng Scanner