Bài 13: Đọc và ghi file dùng luồng byte trong

byte-stream

– Với cách đọc ghi này ta tạo một luồng Byte gắn với file chỉ định dùng FileInputStream và FileOutputStream.
– Để mở một file, đơn giản chỉ cần tạo một đối tượng của những lớp này, tên file cần mở là thông số trong constructor. Khi file mở, việc đọc và ghi dữ liệu trên file được thực hiện một cách bình thường thông qua các phương thức cung cấp trong luồng.

1. Đọc dữ liệu từ file dùng luồng byte:

– Mở một file để đọc dữ liệu FileInputStream(String fileName) throws FileNotFoundException. Nếu file không tồn tại: thì ném ra FileNotFoundException.
– Đọc dữ liệu: dùng phương thức read():
int read( ) throws IOException: đọc từng byte từ file và trả về giá trị của byte đọc được. Trả về -1 khi hết file, và ném ra IOException khi có lỗi đọc.
– Đóng file: dùng phương thức close():
void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ thống đã cấp phát cho file.

Ví dụ:

import java.io.IOException;
 
/*
Tạo file androidvn.txt ở ổ E, gõ nội dung văn bản vào đó rồi lưu lại!
Hiển thị nội dung của một file tên androidvn.txt lưu tại E:\androidvn.txt
*/
public class JavaAndroidVn {
 
    public static void main(String args[]) throws IOException {
 
        FileInputStream f;
        try {
            f = new FileInputStream("E:\\androidvn.txt");
        } catch (FileNotFoundException exc) {
            System.out.println("File Not Found");
            return;
        } catch (ArrayIndexOutOfBoundsException exc) {
            System.out.println("Usage: ShowFile File");
            return;
        }
 
        // Đọc cho tới cuối file
        int i;
        do {
            i = f.read();
            if (i != -1) {
                System.out.print((char) i);
            }
        } while (i != -1);
        f.close();
    }
}

2. Ghi dữ liệu xuống file dùng luồng byte:

– Mở một file để ghi dữ liệu FileOutputStream(String fileName) throws FileNotFoundException
Nếu file không tạo được: thì ném ra FileNotFoundException
– Ghi dữ liệu xuống: dùng phương thức write():
void write(int byteval) throws IOException: ghi một byte xác định bởi tham số byteval xuống file, và ném ra IOException khi có lỗi ghi.
– Đóng file: dùng phương thức close():
void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ thống đã cấp phát cho file.

Ví dụ: Chương trình sẽ tự tạo file “E:\\output.txt”, ghi vào các ký tự từ a -> z

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
class JavaAndroidVn {
 
    public static void main(String args[]) throws IOException {
        FileOutputStream fout;
 
// Tạo file mới!
        try {
            fout = new FileOutputStream("E:\\output.txt");
        } catch (FileNotFoundException exc) {
            System.out.println("Error Opening OutputFile ");
            return;
        }
 
// Ghi file theo từng ký tự từ a -> z
        int i = 'a';
        int j = 'z';
        for (i = 'a'; i <= j; i++) {
            fout.write(i);
        }
        fout.close();
    }
}

3. Copy file trong Java:

Dưới đây là 1 chương trình đơn giản để copy file trong Java, nó chưa thực sự tối ưu vì mình thấy tốc độ của nó rất chậm. Bạn có thể dùng để copy bất cứ định dạng nào, không phải chỉ riêng file văn bản! Nó dùng cách đọc ghi file dùng luồng byte như trên!

class JavaAndroidVn {
 
    public static void main(String args[]) throws IOException {
        FileInputStream fin;
        FileOutputStream fout;
        try {
// open input file
            try {
                fin = new FileInputStream("E:\\in.mp3");
            } catch (FileNotFoundException exc) {
                System.out.println("Input File Not Found");
                return;
            }
 
// open output file
            try {
                fout = new FileOutputStream("E:\\out.mp3");
            } catch (FileNotFoundException exc) {
 
 
                System.out.println("Error Opening OutputFile ");
                return;
            }
        } catch (ArrayIndexOutOfBoundsException exc) {
            System.out.println("Usage: CopyFile From To");
            return;
        }
 
// Copy File
        int i;
        try {
            do {
                i = fin.read();
                if (i != -1) {
                    fout.write(i);
                }
            } while (i != -1);
        } catch (IOException exc) {
            System.out.println("File Error");
        }
        fin.close();
        fout.close();
    }
}

 

Nguyễn Linh

Chia sẻ để cùng tiến bộ...