1. Lớp FileInputStream trong Java
Lớp FileInputStream trong package java.io
có thể được sử dụng để đọc dữ liệu (dạng byte) từ file. Lớp này kế thừa từ lớp abstract InputStream. Để sử dụng FileInputStream thì cần import java.io.FileInputStream
.
Tạo ra một FileInputStream trong Java
1. Sử dụng đường dẫn của file
Chúng ta có thể tạo một input stream liên kết với một file thông qua đường dẫn của file.
FileInputStream input = new FileInputStream(stringPath);
2. Sử dụng một đối tượng đại diện cho file
Chúng ta có thể tạo một input stream liên kết với một file thông qua đối tượng của File.
FileInputStream input = new FileInputStream(File fileObject);
Các phương thức của lớp FileInputStream trong Java
Phương thức read()
read()
đọc một byte từ fileread(byte[] array)
đọc các byte từ file và lưu trữ các byte này vào một mảng (array)read(byte[] array, int start, int length)
đọc length số byte từ file và lưu trữ các byte đó trong một mảng (array) bắt đầu từ vị trí start của mảng byte
Giả sử có 1 file input.txt
nằm trong phân vùng D có nội dung là “This is a line of text inside the file”. Chương trình bên dưới giúp đọc nội dung theo dạng byte từ file đó.
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
byte[] arr = new byte[100];
try {
FileInputStream input = new FileInputStream("D:\\input.txt");
System.out.println("Data in the file: ");
//Đọc byte đầu tiên từ file
int i = input.read();
while(i != -1) {
System.out.print((char)i);
//Đọc byte kế tiếp từ file
i = input.read();
}
input.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Kết quả
Data in the file:
This is a line of text inside the file
Để lấy số byte còn có sẵn trong file mà chưa được đọc, chúng ta sử dụng hàm available()
.
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
FileInputStream input = new FileInputStream("D:\\input.txt");
//Trả về số byte ban đầu chưa được đọc trong file
System.out.println("Available bytes at the beginning: " + input.available());
//Đọc 3 byte từ file
input.read();
input.read();
input.read();
//Trả về số byte chưa được đọc từ file
System.out.println("Available bytes at the end: " + input.available());
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
Kết quả
Available bytes at the beginning: 38
Available bytes at the end: 35
Để giải phóng và bỏ qua một số byte mà không cần đọc trong file thì có thể dùng hàm skip()
.
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
FileInputStream input = new FileInputStream("D:\\input.txt");
//Bỏ qua 5 byte không cần đọc
input.skip(5);
System.out.println("Input stream after skipping 5 bytes:");
//Đọc byte đầu tiên cần đọc
int i = input.read();
while (i != -1) {
System.out.print((char) i);
//Đọc byte kế tiếp từ file
i = input.read();
}
//hàm close() FileInputStream
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
Kết quả
Input stream after skipping 5 bytes:
is a line of text inside the file
Rõ ràng, khi bỏ qua 5 bytes thì nội dung “This” trong file không được đọc và hiển thị ra màn hình. Và chúng ta nên đóng FileInputStream khi không cần đọc dữ liệu nữa với hàm close()
.
2. Lớp FileOutputStream trong Java
Lớp FileOutputStream trong package java.io
có thể được sử dụng để ghi dữ liệu (dạng byte) từ file. Lớp này kế thừa từ lớp abstract OutputStream. Để sử dụng FileOutputStream thì cần import java.io.FileOutputStream
.
Tạo một FileOutputStream
1. Sử dụng đường dẫn của file
Chúng ta có thể tạo một output stream liên kết với một file thông qua đường dẫn của file.
//Sử dụng tham số boolean
FileOutputStream output = new FileOutputStream(String path, boolean value);
//Không sử dụng tham số boolean
FileOutputStream output = new FileOutputStream(String path);
Tham số boolean value là tham số tùy chọn, có thể có hoặc không. Nếu tham số boolean value được thiết lập là true, dữ liệu mới ghi vào file sẽ được ghi nối tiếp vào cuối file, tức là file có cả dữ liệu cũ và mới. Nếu false thì dữ liệu cũ trong file sẽ bị mất (bị ghi đè bởi dữ liệu mới) và chỉ có dữ liệu mới trong file. Nếu không có tham số boolean value thì mặc định dữ liệu sẽ được ghi đè.
2. Sử dụng một đối tượng đại diện cho file
Chúng ta có thể tạo một output stream liên kết với một file thông qua đối tượng của File.
FileOutputStream output = new FileOutputStream(File fileObject);
Các phương thức của lớp FileOutputStream
Phương thức write()
write()
ghi một byte đến file output streamwrite(byte[] array)
ghi những byte từ một mảng đến the output streamwrite(byte[] array, int start, int length)
ghi length byte đến output stream từ một mảng bắt đầu tại vị trí start của mảng
Giả sử muốn tạo và ghi dữ liệu cho 1 file output.txt
nằm trong phân vùng D với nội dung là “This is a line of text inside the file”. Chương trình bên dưới giúp ghi nội dung theo dạng byte cho file đó.
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the file.";
try {
FileOutputStream output = new FileOutputStream("D:\\output.txt");
//đổi string thành byte để ghi vào file
byte[] array = data.getBytes();
//Ghi byte vào file
output.write(array);
output.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Sau khi chạy xong chương trình trên, các bạn sẽ thấy một file output.txt
được tạo trong phân vùng D chứa nội dung là “This is a line of text inside the file”.
Một hàm thường dùng của FileOutputStream là hàm flush()
. Hàm này bắt buộc output stream ghi tất cả dữ liệu đến nơi cần lưu trữ (data destination).
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream out = null;
String data = "This is demo of flush method";
try {
out = new FileOutputStream("D:\\flush.txt");
//Ghi dữ liệu
out.write(data.getBytes());
//Sử dụng hàm flush()
out.flush();
out.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Sau khi ghi dữ liệu xong, chúng ta nên sử dụng hàm close()
để đóng FileOutputStream.
Lưu ý: Trong quá trình đọc hoặc ghi file thì đều có thể xảy ra ngoại lệ (exception). Chúng ta nên sử dụng try…catch để bắt ngoại lệ để không làm chương trình có thể kết thúc bất thường.