Tags:

Ghi file với FileOutputStream trong java

FileOutStream là một luồng dữ liệu đầu ra dùng để ghi dữ liệu và File hoặc FileDescriptor. FileOutputStream được sử dụng để ghi các luồng dữ liệu thô dưới dạng byte vì vậy sẽ tốt cho trường hợp các dữ liệu không phải dạng text như là pdf, excel, image etc.

Khởi tạo FileOutputStream

FileOutputStream cung cấp các method được ghi dữ liệu dưới dạng byte nhưng trước tiên chúng ta cùng một instance của nó, dưới đây là các cách khởi tạo FileOutputStream.

FileOutputStream(File file) – Khởi tạo FileOutputStream từ một instance file. Nếu file không tồn tại sẽ được tại mới. Nếu file đã tồn tại dữ liệu được ghi từ FileOutputStream sẽ ghi đè lên nội dung trước đó.

FileOutStream(File file, boolean append) – Khởi tạo FileOutoutStream từ file truyền vào, nếu append là true dữ liệu ghi từ FileOutputStream sẽ ghi vào cuối file, ngược lại dữ liệu sẽ được ghi đè lên.

FileOutputStream(FileDescriptor fdObj) – Khởi tạo FileOutputStream từ một instance FileDescriptor. Nếu file không tồn tại sẽ được tại mới. Nếu file đã tồn tại dữ liệu được ghi từ FileOutputStream sẽ ghi đè lên nội dung trước đó

FileOutputStream(String pathName) – Khởi tạo FileOutputStream từ đường dẫn. Cách hoạt động giống với FileOutputStream(File file).

FileOutputStream(String pathName, boolean append) – Khởi tạo FileOutputStream từ đường dẫn. Cách hoạt động giống với FileOutputStream(File file, booleab append).

Các method trong FileOutputStream

close()

Đóng tất cả các kết nối của FileOutputStream với các tài nguyên nó kết nối.

finalize(()

Đảm bảo rằng close() được gọi và không còn kết nối nào giữa FileOutputStream với các tài nguyên khác.

getChanel() 

Trả về FileChannel object duy nhất liên kết với FileOutputStream.

getFD()

Trả về FileDescriptor object của FileOutputStream.

write(int b)

Ghi một byte b xuống OutputStream.

write(byte[] b)

Ghi một mảng byte b xuống OutputStream.

write(byte[] b, int off, int len)

Ghi một mảng byte b xuống OutputStream bắt đầu tại vị trí off và ghi tối đa len byte.

Ghi dữ liệu vào file sử dụng FileOutputStream

import java.io.File;
import java.io.FileOutputStream;

 class FileOutputStreamWrite {

    public static void main(String[] args) {
        File file = null;
        FileOutputStream fileOutputStream = null;
        String data = "Hello World.";
        try {
            file = new File("/Users/nguyenthanhhai/Desktop/test.txt");
            fileOutputStream = new FileOutputStream(file);
            //create file if not exists
            if (!file.exists()) {
                file.createNewFile();
            }
            //fetch bytes from data
            byte[] bs = data.getBytes();
            fileOutputStream.write(bs);
            fileOutputStream.flush();
            fileOutputStream.close();
            System.out.println("File written successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

}

Ví dụ finalize

finalize() dùng để đảm bảo rằng tất các các kết nối đến FileOutStream đã được đóng. Nếu không nó thể ném ra một exception 

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

class FileOutputStreamFinalizeExample extends FileOutputStream {

    public FileOutputStreamFinalizeExample(File file) throws FileNotFoundException {
        super(file);
    }

    public static void main(String[] args) {
        File file = null;
        try {
            file = new File("/Users/nguyenthanhhai/Desktop/test.txt");
            FileOutputStreamFinalizeExample fileOutputStream = new FileOutputStreamFinalizeExample(file);
            //create file if not exists
            if (!file.exists()) {
                file.createNewFile();
            }
            //closing fileOutputStream
            fileOutputStream.finalize();
            //try to write data
            fileOutputStream.write(123);
            fileOutputStream.flush();
            fileOutputStream.close();
            System.out.println("File written successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Output:

java.io.IOException: Stream Closed
at java.io.FileOutputStream.write(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:290)
at FileOutputStreamFinalizeExample.main(Main.java:23)

Chúng ta chưa gọi close() để đóng kết nối mà đã gọi finalize() nên nhận được exception như trên. 

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