Hướng dẫn và ví dụ Java FileWriter
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ề InputStreamReader và OutputStreamWriter để tìm hiểu chi tiết hơn về cách Java đọc và ghi các mã hoá UTF-16 và UTF-8.
Các hướng dẫn Java IO
- Hướng dẫn và ví dụ Java CharArrayWriter
- Hướng dẫn và ví dụ Java FilterReader
- Hướng dẫn và ví dụ Java FilterWriter
- Hướng dẫn và ví dụ Java PrintStream
- Hướng dẫn và ví dụ Java BufferedReader
- Hướng dẫn và ví dụ Java BufferedWriter
- Hướng dẫn và ví dụ Java StringReader
- Hướng dẫn và ví dụ Java StringWriter
- Hướng dẫn và ví dụ Java PipedReader
- Hướng dẫn và ví dụ Java LineNumberReader
- Hướng dẫn và ví dụ Java PushbackReader
- Hướng dẫn và ví dụ Java PrintWriter
- Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
- Hướng dẫn sử dụng luồng vào ra ký tự trong Java
- Hướng dẫn và ví dụ Java BufferedOutputStream
- Hướng dẫn và ví dụ Java ByteArrayOutputStream
- Hướng dẫn và ví dụ Java DataOutputStream
- Hướng dẫn và ví dụ Java PipedInputStream
- Hướng dẫn và ví dụ Java OutputStream
- Hướng dẫn và ví dụ Java ObjectOutputStream
- Hướng dẫn và ví dụ Java PushbackInputStream
- Hướng dẫn và ví dụ Java SequenceInputStream
- Hướng dẫn và ví dụ Java BufferedInputStream
- Hướng dẫn và ví dụ Java Reader
- Hướng dẫn và ví dụ Java Writer
- Hướng dẫn và ví dụ Java FileReader
- Hướng dẫn và ví dụ Java FileWriter
- Hướng dẫn và ví dụ Java CharArrayReader
- Hướng dẫn và ví dụ Java ByteArrayInputStream
- Hướng dẫn và ví dụ Java DataInputStream
- Hướng dẫn và ví dụ Java ObjectInputStream
- Hướng dẫn và ví dụ Java InputStreamReader
- Hướng dẫn và ví dụ Java OutputStreamWriter
- Hướng dẫn và ví dụ Java InputStream
- Hướng dẫn và ví dụ Java FileInputStream
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java New IO
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Java Collections Framework
- Java cơ bản
- Các hướng dẫn Java Date Time
- Các thư viện mã nguồn mở Java
- Các hướng dẫn Java Web Services
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Boot