Các phương pháp đọc/ghi tệp dữ liệu khác nhau trong Java | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Các phương pháp đọc/ghi tệp dữ liệu khác nhau trong Java

Chia sẻ kiến thức 29/01/2022

Trong bài viết này, FUNIX sẽ chỉ cho bạn một số phương pháp đọc/ ghi tệp dữ liệu phổ biến, dễ dàng áp dụng vào thực tế!

>> Đừng học thuộc code, thay vào đó hãy chia nhỏ nó để hiểu!

Nếu bạn muốn tìm hiểu về ngôn ngữ lập trình Java sâu hơn, kĩ năng đọc/ghi các tệp Java là một kỹ thuật quan trọng cần thành thạo. Trước đây, bạn có thể quen với việc đọc dữ liệu từ bảng điều khiển. Nhưng đối với các tệp dữ liệu lớn, hàng nghìn đến hàng triệu hàng, bạn sẽ xử lý như thế nào? May mắn thay, Java là một ngôn ngữ có thể hỗ trợ một số lượng lớn các tùy chọn cho từng tình huống cụ thể mà bạn cần. 

Các phương pháp đọc/ghi tệp dữ liệu khác nhau trong Java
Các phương pháp đọc/ghi tệp dữ liệu khác nhau trong Java.

1. Mô tả một số phương pháp đọc file trong Java

Các phương thức hỗ trợ đọc file không chỉ tồn tại trong Java mà còn trong hầu hết các ngôn ngữ lập trình khác. Tuy nhiên, mỗi ngôn ngữ có một cách tiếp cận khác nhau. Để biết chúng khác nhau như thế nào, trước tiên bạn phải biết phương pháp đọc/ ghi tệp dữ liệu trong Java. Việc đọc file trong Java có thể nói là khá đa dạng về phương thức hỗ trợ.

Để tìm hiểu thêm, trước tiên chúng ta tạo một tệp text.txt (ở đây, nó được trong thư mục F:\content-niit) với nội dung sau để hỗ trợ cho phần code.

Farewell! thou art too dear for my possessing, 

And like enough thou know’st thy estimate, 

The charter of thy worth gives thee releasing: 

My bonds in thee are all determinate. 

For how do I hold thee but by thy granting, 

And for that riches where is my deserving? 

The cause of this fair gift in me is wanting, 

And so my patent back again is swerving. 

Thy self thou gav’st, thy own worth then not knowing, 

Or me to whom thou gav’st it, else mistaking, 

So thy great gift upon misprision growing, 

Comes home again, on better judgement making. 

Thus have I had thee as a dream doth flatter, 

In sleep a king, but waking no such matter.

Sau đây là chương trình để đọc file trên.

1.1 Phương pháp # 1: Sử dụng Scanner để đọc các tệp Java

Cách sử dụng Scanner, xuất nhập trên màn hình console trước đây có lẽ đã quá quen thuộc. Khi sử dụng file, Scanner cung cấp 2 phương thức hasNextLine () và nextLine () hỗ trợ đọc file rất đơn giản, gần gũi và dễ sử dụng. Đây là ví dụ về cách tôi sử dụng Máy quét để đọc tệp:

package file;

// Import package cần thiết

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Scanner;

import java.util.logging.Level;

import java.util.logging.Logger;

public class ReadFileWithScanner {

    public static void main(String args[]) throws FileNotFoundException {

        String url = “F:\\content-niit\\file-content.txt”;

        // Đọc dữ liệu từ File với Scanner

        FileInputStream fileInputStream = new FileInputStream(url);

        Scanner scanner = new Scanner(fileInputStream);

        try {

            while (scanner.hasNextLine()) {

                System.out.println(scanner.nextLine());

            }

        } finally {

            try {

                scanner.close();

                fileInputStream.close();

            } catch (IOException ex) {

                Logger.getLogger(ReadFileWithBufferedReader.class.getName())

                                .log(Level.SEVERE, null, ex);

            }

        }

    }

}

1.2 Phương pháp # 2: Sử dụng BufferedReader để đọc các tệp trong Java

Sử dụng BufferedReader để đọc các tệp trong Java có lẽ là cách dễ sử dụng nhất. BufferedReader cung cấp một hàm readLine () tích hợp để đọc từng dòng dữ liệu tệp. Phương pháp này yêu cầu sử dụng InputStream để mở và đọc tệp.

package file;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.logging.Level;

import java.util.logging.Logger;

public class ReadFileWithBufferedReader {

    public static void main(String args[]) throws IOException {

        String url = “F:\\content-niit\\file-content.txt”;

        // Đọc dữ liệu từ File với BufferedReader

        FileInputStream fileInputStream = null;

        BufferedReader bufferedReader = null;

        try {

            fileInputStream = new FileInputStream(url);

            bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));

            String line = bufferedReader.readLine();

            while (line != null) {

                System.out.println(line);

                line = bufferedReader.readLine();

            }

        } catch (FileNotFoundException ex) {

            Logger.getLogger(ReadFileWithBufferedReader.class.getName()

                            .log(Level.SEVERE, null, ex);

        } catch (IOException ex) {

            Logger.getLogger(ReadFileWithBufferedReader.class.getName())

                            .log(Level.SEVERE, null, ex);

        } finally {

            try {

                bufferedReader.close();

                fileInputStream.close();

            } catch (IOException ex) {

                Logger.getLogger(ReadFileWithBufferedReader.class.getName()

                                .log(Level.SEVERE, null, ex);

            }

        }

    }

}

1.3 Phương pháp # 3: Sử dụng File và FileReader để đọc tệp

Phương pháp này tương tự như BufferedReader nhưng đơn giản hơn một chút.

package file;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

public class ReadFileWithFileAndFileReader {

    public static void main(String args[]) throws IOException {

        String url = “F:\\content-niit\\file-content.txt”;

        // Đọc dữ liệu từ File với File và FileReader

        File file = new File(url);

        BufferedReader reader = new BufferedReader(new FileReader(file));

        try {

            String line = reader.readLine();

            while (line != null) {

                System.out.println(line);

                line = reader.readLine();

            }

        } catch (FileNotFoundException ex) {

            Logger.getLogger(ReadFileWithBufferedReader.class.getName())

                            .log(Level.SEVERE, null, ex);

        } catch (IOException ex) {

            Logger.getLogger(ReadFileWithBufferedReader.class.getName())

                            .log(Level.SEVERE, null, ex);

        } finally {

            try {

                reader.close();

                // file.close();

            } catch (IOException ex) {

                Logger.getLogger(ReadFileWithBufferedReader.class.getName())

                                .log(Level.SEVERE, null, ex);

            }

        }

    }

}

Java hỗ trợ nhiều phương pháp xử lý file khác nhau nhưng 3 phương pháp chung trên là dễ áp dụng mà vẫn có thể giúp bạn xử lý bất kì tình huống nào gặp phải. Có một số phương pháp khó hơn, phức tạp hơn và ít được sử dụng hơn, nên nếu có thời gian, bạn có thể tự học để đa dạng code của mình.

>>> Xem thêm: 10 Lý do hàng đầu để học JavaScript làm ngôn ngữ lập trình nền tảng

2. Làm thế nào để đọc các tệp XML trong Java

Theo định nghĩa trong lập trình, file có nhiều định dạng khác nhau. Mỗi định dạng có một hoặc nhiều phương pháp xử lý khác nhau. Trong phạm vi một bài viết, rất khó để chia sẻ tất cả chúng, nên chúng tôi sẽ giới thiệu với các bạn một loại tệp phổ biến khác là tệp XML.

Mục đích chính của tệp XML là đơn giản hóa việc chia sẻ dữ liệu giữa các nền tảng và hệ thống được kết nối với Internet. Vì vậy, XML có tác dụng rất lớn trong việc chia sẻ và trao đổi dữ liệu giữa các hệ thống. Chính vì vậy, việc đọc/ ghi các tệp XML chắc chắn sẽ trở nên quan trọng. 

Trước khi tìm hiểu phương pháp đọc/ghi tệp dữ liệu XML trong Java, bạn cần chuẩn bị trước một tệp XML và thêm một số nội dung vào đó. Như trong ví dụ trước, chúng tôi đã tạo một tệp family.xml (trong thư mục F:\content-niit) với nội dung ví dụ sau:

<?xml version=“1.0”?>

<family>

    <member id=“4”>

        <firstname>Michael</firstname>

        <lastname>Corleone</lastname>

        <age>22</age>

        <earnings>$1.000.000</earnings>

    </member>

    <member id=“3”>

        <firstname>Tom</firstname>

        <lastname>Hagen</lastname>

        <age>26</age>

        <earnings>$300.000</earnings>

    </member>

</family>

Để đọc tệp XML ở trên, bạn cần sử dụng DOM XML – phân tích cú pháp toàn bộ tệp XML và lưu trữ nó trong bộ nhớ, sau đó lập mô hình nó dưới dạng cấu trúc TREE. Việc này được Java thực hiện tự động, công việc của bạn là lướt qua để kiểm tra dữ liệu

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.w3c.dom.Node;

import org.w3c.dom.Element;

import java.io.File;

public class ReadFileXML {

    public static void main(String argv[]) {

        String url = “F:\\content-niit\\family.xml”;

        try {

            File fXmlFile = new File(url);

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

            Document doc = dBuilder.parse(fXmlFile);

            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName(“member”);

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    System.out.println(“Con thứ: “

                                        + eElement.getAttribute(“id”));

                    System.out.println(“Tên: “

                                        + eElement.getElementsByTagName(“firstname”)

                                        .item(0).getTextContent());

                    System.out.println(“Họ: “

                                        + eElement.getElementsByTagName(“lastname”)

                                        .item(0).getTextContent());

                    System.out.println(“Tuổi: “

                                        + eElement.getElementsByTagName(“age”)

                                        .item(0).getTextContent());

                    System.out.println(“Thu nhập: “

                                        + eElement.getElementsByTagName(“earnings”)

                                        .item(0).getTextContent());

                    System.out.println(” “);

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

Tóm lại, có nhiều cách để đọc tệp trong Java. Tuy nhiên, Java hỗ trợ đầy đủ mọi nhu cầu thao tác trên file của bạn. Và tùy theo từng loại file khác nhau mà chúng ta sẽ lựa chọn các phương pháp xử lý khác nhau để đạt được kết quả tốt nhất. Mỗi phương pháp cũng có những ưu nhược điểm riêng nên trong quá trình luyện tập các bạn nhớ chú ý và lưu ý lại để lần sau có những chỉnh sửa hợp lý nhé.

Bài viết trên đây đã chia sẻ một số phương pháp đọc/ ghi tệp dữ liệu phổ biến trong Java. Hi vọng các thông tin mà FUNiX chia sẻ trên đây hữu ích trong quá trình học lập trình của các bạn và chúc bạn học tốt!

>>> Nếu bạn đang có nhu cầu tìm hiểu về khóa học lập trình đi làm ngay. Hãy liên hệ với FUNiX ngay tại đây:

>>> Xem thêm bài viết:

Ngôn ngữ lập trình Java: Hướng dẫn cho người mới bắt đầu về Java

Có nên lập trình game bằng C++, C#, Java và JavaScript?

Hỏi đáp về ngôn ngữ JavaScript cùng lập trình viên

Những trung tâm dạy học lập trình java trực tuyến trong vòng 6 tháng

Cách sử dụng Package và Collection có sẵn trong Java

 

 

Phạm Thị Thanh Ngọc

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!