Tags:

Sử dụng FileWriter đọc file txt thay thế FileOutputStream

Điểm khác nhau cơ bản giữa FileWriter và FileOutputStream là FileWriter ghi file dưới dạng luồng ký tự khác với FileOutputStream ghi file theo luồng byte. Vì vậy FileWriter được khuyến khích cho sử dụng ghi file text hơn so với FileOutputStream.

Java-FileWriter

Khởi tạo FileWriter

FileWriter cung cấp nhiều constructor để khởi tạo với nhiều mục đích khác nhau như bạn có thể chọn ghi đè lên nội dung của file nếu nó đã tồn tại hoặc nối tiếp theo sau nội dung đã có sẵn etc.

  • FileWriter(File file) – Khởi tạo FileWriter object sử dụng File. Nội dung cũ sẽ bị ghi đè bởi nội dung mới mà FileWriter object ghi xuống.
  • FileWriter(File file, boolean append) – Khởi tạo FileWriter object sử dụng File. Nội dung cũ sẽ bị ghi đè bởi nội dung mới mà FileWriter object ghi xuống nếu append false, nếu append true thì nội dung sẽ nối đuôi nội dung cũ.
  • FileWriter(FileDescriptor fd) – Khởi tạo FileWriter object sử dụng FileDescriptor. Nội dung cũ sẽ bị ghi đè bởi nội dung mới mà FileWriter object ghi xuống.
  • FileWriter(String pathName) – Khởi tạo FileWriter object sử dụng đường dẫn đến file. Nội dung cũ sẽ bị ghi đè bởi nội dung mới mà FileWriter object ghi xuống.
  • FileWriter(String pathName, boolean append) – Khởi tạo FileWriter object sử dụng đường dẫn đến file. Nội dung cũ sẽ bị ghi đè bởi nội dung mới mà FileWriter object ghi xuống nếu append false, nếu append true thì nội dung sẽ nối đuôi nội dung cũ.

Ví dụ FileWriter trong java

Chúng ta có thể ghi một ký tự đơn xuống file với write(int c) method.

import java.io.FileWriter;
import java.io.IOException;

class FileWriterWriteIntExample {

    public static void main(String[] args) {
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt");
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write(65);
            fileWriter.write(66);
            fileWriter.write(67);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (fileWriter != null) {
                    fileWriter.flush();
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

write(String str, int off, int len) cho phép chúng ta ghi một chuỗi con của str, bắt đầu tại vị trí off và chuỗi con có chiều dài tối đa là len.

import java.io.FileWriter;

class FileWriterWriteStringExample {

    public static void main(String[] args) {
        String data = "This is FileWriter Example.";
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write(data, 8, 10);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output: FileWriter

write(char[] cbuf, int off, int len) cho phép chúng ta ghi một mảng con của cbuf, bắt đầu tại vị trí off và chuỗi con có chiều dài tối đa là len.

import java.io.FileWriter;

class FileWriterWriteStringExample {

    public static void main(String[] args) {
        char[] data = "This is FileWriter Example.".toCharArray();
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write(data, 8, 10);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Sử dụng write(char[] cbuf)để ghi toàn bộ các ký tự trong mảng cbuf vào file

import java.io.FileWriter;

class FileWriterWriteStringExample {

    public static void main(String[] args) {
        char[] data = new char[100];
        data[0] = 65;
        data[1] = 66;
        data[2] = 67;
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output: ABC

Note: Các phần tử không có giá trị sẽ được bỏ qua trong quá trình ghi. 

import java.io.FileWriter;

class FileWriterWriteStringExample {

    public static void main(String[] args) {
        char[] data = new char[100];
        data[0] = 65;
        data[1] = 66;
        data[2] = 67;
        data[9] = 67;
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output: ABCC

Như vậy thì các bạn thấy giá trị từ vị trí thứ 3 đến 8 trong mảng rỗng và đã bị bỏ qua, kết quả nhận được là cộng dồn theo thứ tự 0,1,2,9.

Ghi một String xuống file chúng ta có thể sử dụng write(String method). hoặc sử dụng append(CharSequence c).

import java.io.FileWriter;

class FileWriterWriteStringExample {

    public static void main(String[] args) {
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.OutputStreamWriter
            fileWriter.write("XXX");
            fileWriter.append("YZ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

flush() trong FileWriter

Gọi flush() method sẽ ngay lập tức ghi dữ liệu xuống output file.

import java.io.FileWriter;

class FileWriterFlushExample {

    public static void main(String[] args) {
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.Writer
            fileWriter.write("Shareprogramming");
            //inherited method from java.io.OutputStreamWriter
            fileWriter.flush();

            fileWriter.write(" Tutorials");
            fileWriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Đóng kết nối FileWriter 

Sau khi hoàn tất các tác vụ FileWriter phải ngắt kết nối đến các tài nguyên mà nó đang tham chiếu đến, sử dụng close() method để ngắt kết nối.

fileWriter.close();

Note: Sau khi đã ngắt kết nối chúng ta không thể thao tác gì thêm đối với các tài nguyên mà nó đang tham chiếu đến. Nếu không sẽ gặp các exception.

import java.io.FileWriter;

class FileWriterFlushExample {

    public static void main(String[] args) {
        try(FileWriter fileWriter = new FileWriter("/Users/nguyenthanhhai/Desktop/test.txt")) {
            //inherited method from java.io.Writer
            fileWriter.write("Shareprogramming");
            //inherited method from java.io.OutputStreamWriter
            fileWriter.close();

            fileWriter.write(" Tutorials");
            fileWriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:118)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:135)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:220)
at java.io.Writer.write(Writer.java:157)
at FileWriterFlushExample.main(Main.java:12)

Kết

Với các method hỗ trợ ghi ký tự xuống file text thì FileWriter nên được dùng hơn FileOutputStream khi chúng ta cần ghi file text trong java.

Nguồn tham khảo

https://www.journaldev.com/20891/java-filewriter-example

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x