openplanning

Hướng dẫn và ví dụ Java FileWriter

  1. FileWriter
  2. Examples

1. FileWriter

FileWriter là một lớp con của OutputStreamWriter, nó được sử dụng để ghi các file văn bản.
FileWriter không có thêm các phương thức nào ngoài các phương thức được thừa kế từ OutputStreamWriter, thực tế bạn có thể sử dụng OutputStreamWriter để ghi các ký tự vào bất kỳ một mục tiêu nào, tuy nhiên FileWriter được thiết kế riêng để ghi các ký tự vào file hệ thống.
FileWriter​ constructors
FileWriter​(File file)     
 
FileWriter​(FileDescriptor fd)     

FileWriter​(File file, boolean append)     

FileWriter​(File file, Charset charset)     

FileWriter​(File file, Charset charset, boolean append)     
 
FileWriter​(String fileName)     

FileWriter​(String fileName, boolean append)     

FileWriter​(String fileName, Charset charset)     

FileWriter​(String fileName, Charset charset, boolean append)
Chú ý: Các constructor có tham số Charset được thêm vào FileWriter từ phiên bản Java 11, vì vậy nếu bạn đang sử dụng Java phiên bản cũ hơn và muốn ghi một file với mã hoá (encoding) được chỉ định hãy sử dụng lớp OutputStreamWriter để thay thế.

2. Examples

FileWriterEx1.java
package org.o7planning.filewriter.ex;

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

public class FileWriterEx1 {

    public static void main(String[] args) throws IOException {
        // Windows: C:/SomeFolder/out-file.txt
        File outFile = new File("/Volumes/Data/test/out-file.txt");
        
        outFile.getParentFile().mkdirs();
        
        FileWriter fileWriter = new FileWriter(outFile);
        
        System.out.println("Writer file: " + outFile.getAbsolutePath());
        System.out.println("With encoding: " + fileWriter.getEncoding());

        fileWriter.write("Line 1");
        fileWriter.write("\n");
        fileWriter.write("Line 2");
        fileWriter.write("\n");
        fileWriter.write("Line 3");

        fileWriter.close();
    }
}
Output:
out-file.txt
Line 1
Line 2
Line 3
FileWriter cũng cho phép bạn ghi thêm dữ liệu vào một file sẵn có, nếu file không tồn tại nó sẽ được tạo ra.
FileWriterEx2.java
package org.o7planning.filewriter.ex;

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

public class FileWriterEx2 {

    public static void main(String[] args) throws IOException {
        // Windows: C:/SomeFolder/out-file.txt
        File outFile = new File("/Volumes/Data/test/out-file.txt");
        
        outFile.getParentFile().mkdirs();
        
        // FileWriter(File outFile, boolean append)
        FileWriter fileWriter = new FileWriter(outFile, true);
        
        System.out.println("Writer file: " + outFile.getAbsolutePath());
        System.out.println("With encoding: " + fileWriter.getEncoding());

        fileWriter.write("Line 4");
        fileWriter.write("\n");
        fileWriter.append("Line 5").append("\n");
        fileWriter.close();
    }
}
Ví dụ sử dụng FileWriter để ghi một file với mã hoá UTF-16, sau đó đọc file vừa ghi ra bằng FileInputStream để xem các bytes trên file.
FileWriter_UTF16_Ex1.java
package org.o7planning.filewriter.ex;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileWriter_UTF16_Ex1 {
    // Windows: C:/SomeFolder/out-utf16-file.txt
    private static final String filePath = "/Volumes/Data/test/out-utf16-file.txt";

    public static void main(String[] args) throws IOException {
        System.out.println("--- Write UTF-16 File ---");
        write_UTF16_File();
        
        System.out.println("--- Read File as Binary Stream ---");
        readAsInputStream();
    }

    private static void write_UTF16_File() throws IOException {
        File outFile = new File(filePath);
        outFile.getParentFile().mkdirs();

        // FileWriter(File outFile, boolean append)
        FileWriter fileWriter = new FileWriter(outFile, StandardCharsets.UTF_16);
        fileWriter.write("JP日本-八洲");
        fileWriter.close();
    }

    private static void readAsInputStream() throws IOException {
        File file = new File(filePath);

        FileInputStream fis = new FileInputStream(file);

        int byteCode;
        while ((byteCode = fis.read()) != -1) {
            System.out.println((char) byteCode + " " + byteCode);
        }
        fis.close();
    }
}
Output:
--- Write UTF-16 File ---
--- Read File as Binary Stream ---
þ 254
ÿ 255
0
J 74
0
P 80
e 101
å 229
g 103
, 44
0
- 45
Q 81
k 107
m 109
2 50
Dưới đây là hình minh hoạ các bytes trên FileWriter và các bytes trong file vừa được ghi ra bởi FileWriter:
Hai bytes đầu tiên (254,255) trong file UTF-16 được sử dụng để đánh dấu rằng nó bắt đầu một dữ liệu mã hoá bằng UTF-16.
Bạn có thể xem thêm các bài viết của tôi về InputStreamReaderOutputStreamWriter để tìm hiểu chi tiết hơn về cách Java đọc và ghi các mã hoá UTF-16UTF-8.

Các hướng dẫn Java IO

Show More