Tags:

Đọc file với FileInputStream trong java

FileInputStream dùng để đọc dữ liệu theo luồng byte có thứ tự. FileInputStream thường để đọc các luồng dữ liệu thô như là hình ảnh, text etc.

Khởi tạo FileInputStream

  • FileInputStream(File file) :Khởi tạo FileInputStream từ một file instance.
  • FileInputStream(FileDescriptor fdobj) Khởi tạo FileInputStream từ FileDescriptor.
  • FileInputStream(String name) :Khởi tạo FileInputStream từ File theo đường dẫn được chỉ định.

Các method trong FileInputStream

int read()

Đọc dữ liệu từ FileInputStream theo từng byte, nghĩa là mỗi lần đọc chỉ đọc được 1 byte. 

Syntax: public int read() throws IOException

Returns: Method read() trả về -1 thông báo đã đọc hết dữ liệu từ FileInputStream.

Throws:IOException

int read(byte[] b)

Đọc dữ từ FileInputStream vào mảng byte được cung cấp. read(byte[] b) sẽ cố gắng đọc nhiều byte nhất vào mảng dựa theo b.length. Nếu sức chứa của b nhiều hơn số byte từ FileInputStream thì phần rỗng còn lại sẽ được lặp lại giống như phần đầu của b cho đến hết mảng. 

Syntax:public int read(byte[] b) throws IOException

Parameters: b - mảng chứa dữ liệu được đọc vào.

Returns: Tổng số byte đọc được vào mảng b hoặc -1 để báo hiệu tất cả dữ liệu đã được đọc xong.

Throws:IOException

read(byte[], int off, int len)

Đọc dữ từ FileInputStream vào mảng byte được cung cấp. read(byte[] b) sẽ cố gắng đọc nhiều byte nhất vào mảng dựa theo b.length. Vị trí đọc sẽ bắt đầu từ off và đọc tối đa len byte.

Syntax: public int read(byte[] b, int off, int len) throws IOException

Parameters:
b - Mảng chứa dữ liệu đọc được từ FileInputStream.
off - Vị trí bắt đầu đọc tron FileInputStream
len - Số lượng byte tối đa được đọc
Returns: Số byte đọc được, hoặc -1 nếu đã được hết từ FileInputStream. 

Throws:
NullPointerException
IndexOutOfBoundsException

long skip(long n)

Bỏ qua và loại bỏ n byte từ FileInputStream.

Syntax:public long skip(long n) throws IOException
Parameters:
n - Số byte bỏ qua.
Returns: Số byte thật được bỏ qua
Throws:
IOException

int available()

Trả về số lượng byte còn lại có thể đọc được

Syntax:public int available()
              throws IOException

Returns: Số byte còn lại có thể đọc được 

Throws:
IOException

void close()

Đóng kết nối của FileInputStream với các tài nguyên mà nó đang tham chiếu đến.

Syntax:public void close()
           throws IOException


FileDescriptor getFD()

Trả về một FileDescriptor object của tài nguyên đang được FileInputStream kết nối đến.

Syntax :public final FileDescriptor getFD() throws IOException

Returns: FileDescriptor

Throws: IOException

FileChannel getChannel()

Trả về FileChannel object duy nhất được liên kết với FileInputStream.

Syntax :public FileChannel getChannel()
Returns: FileChannel object

void finalize()

Đảm bảo rằng close() method được gọi và FileInputStream không còn tham chiếu đến tài nguyên nào.

Các bước đọc dữ liệu từ FileInputStream

Để đọc dữ liệu từ FileInputStream 

B1: Khởi tạo FileInputStream với file mà chúng cần liên kết

InputStream fileInputStream =new FileInputStream(“file.txt”);

B2: Đọc dữ liệu, chúng ta có thể sử dụng các method read() được nêu ở trên.

ch=fileInputStream.read();

Ví dụ FileInputStream

Ví dụ 1: Tổng về các method trong FileInputStream

import java.io.*;

class ReadFile {
    public static void main(String args[]) {

        //attach the file to FileInputStream 
        try (FileInputStream fin = new FileInputStream("file1.txt")) {

            //illustrating getChannel() method 
            System.out.println(fin.getChannel());

            //illustrating getFD() method 
            System.out.println(fin.getFD());

            //illustrating available method 
            System.out.println("Number of remaining bytes:" + fin.available());

            //illustrating skip method 
            /*Original File content:
             * This is my first line
             * This is my second line*/
            fin.skip(4);
            System.out.println("FileContents :");
            //read characters from FileInputStream and write them 
            int ch;
            while ((ch = fin.read()) != -1)
                System.out.print((char) ch);
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Output:

sun.nio.ch.FileChannelImpl@1540e19d java.io.FileDescriptor@677327b6 Number of remaining bytes:45 FileContents : is my first line This is my second line

Ví dụ 2: Đọc từng ký tự trong file text với FileInputStream

import java.io.FileInputStream;
import java.io.IOException;

class ReadFile {
    public static void main(String args[]) {

        try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) {
            System.out.println("FileContents :");
            //read characters from FileInputStream and write them
            int ch;
            while ((ch = fin.read()) != -1)
                System.out.print((char) ch);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Ví dụ 3: Đọc một mảng ký tự trong file text với FileInputStream

import java.io.FileInputStream;
import java.io.IOException;

class ReadFile {
    public static void main(String args[]) throws IOException {

        try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) {
            System.out.println("FileContents :");
            //read characters from FileInputStream and write them
            byte[] bytes = new byte[5];
            // So byte doc duoc tu FileInputStream
            int bytesReaded = fin.read(bytes);
            while (bytesReaded != -1) {
                for (int i = 0; i < bytesReaded; i++) {
                    System.out.print((char) bytes[i]);
                }
                bytesReaded = fin.read(bytes);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Ví dụ 4: Đọc từng dòng trong file text với FileInputStream

import java.io.FileInputStream;
import java.io.IOException;

class ReadFile {
    public static void main(String args[]) {

        try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) {
            int data = fin.read();
            StringBuilder line = new StringBuilder();
            while (data != -1) {
                if (((char) data == '\n') || ((char) data == '\r')) {
                    System.out.println("New line: " + line.toString());
                    line.delete(0, line.length());
                    data = fin.read();
                    continue;
                }
                line.append((char) data);
                data = fin.read();

            }
            System.out.println("New line: " + line.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Nguồn tham khảo:

https://www.geeksforgeeks.org/java-io-fileinputstream-class-java/

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