Bài tập

FileInputStream, FileOutputStream – Đọc/Ghi file trong Java

Huy Erick

Tìm hiểu về FileInputStream trong Java thông qua chương trình quản lý thông tin học sinh với các chức năng: nhập thông tin từ bàn phím, tìm kiếm và đọc lưu file từ danh sách....

Tìm hiểu về FileInputStream trong Java thông qua chương trình quản lý thông tin học sinh với các chức năng: nhập thông tin từ bàn phím, tìm kiếm và đọc lưu file từ danh sách.

FileInputStream trong Java

FileInputStream là một lớp rất hữu ích trong Java để đọc dữ liệu từ một tập tin dưới dạng chuỗi byte. Nó được thiết kế đặc biệt để cho phép bạn đọc các chuỗi byte “thô” từ tệp (ví dụ: dữ liệu hình ảnh hoặc âm thanh). Tuy nhiên, nếu bạn chỉ cần đọc dữ liệu dưới dạng chuỗi ký tự, thì tốt nhất là sử dụng FileReader.

Các phương thức của lớp FileInputStream trong Java

  • FileInputStream(String name): Khởi tạo từ tên tệp.
  • FileInputStream(File file): Khởi tạo từ một đối tượng File.
  • int read(): Đọc một byte dữ liệu từ luồng và trả về một số nguyên từ 0 đến 255. Nếu đọc đến cuối tập tin, nó trả về -1.
  • int read(byte[] b): Đọc một số byte từ luồng vào mảng byte được chỉ định và trả về số byte đã đọc. Nếu đọc đến cuối tập tin, nó trả về -1.
  • int read(byte[] b, int off, int len): Đọc tối đa len byte từ luồng vào mảng byte được chỉ định, bắt đầu từ vị trí off, và trả về số byte đã đọc. Nếu đọc đến cuối tập tin, nó trả về -1.
  • int available(): Nó được sử dụng để trả về số byte ước tính có thể đọc được từ file input stream.
  • void close(): Đóng luồng đầu vào. Bất kỳ tài nguyên nào được sử dụng bởi luồng cũng sẽ được giải phóng.

Ví dụ về FileInputStream

Bài 15: Viết chương trình quản lý danh sách học sinh với các chức năng như sau:

  • Tạo lớp Nguoi.
  • Tạo giao diện (interface) IHoatdong với phương thức gioithieu().
  • Tạo lớp Hocsinh thừa kế từ Nguoi và thi hành giao diện IHoatdong (cho biết học sinh học lớp nào).
  • Viết chương trình:
    • Nhập vào N học sinh.
    • Hiện N học sinh ra màn hình.
    • Nhập vào 1 năm sinh X, hiển thị ra màn hình tên từng năm đó và thông tin tự giới thiệu của từng học sinh.
    • Lưu danh sách học sinh vào file.
    • Đọc danh sách học sinh có từ file và in lên màn hình.

Interface IHoatDong

package bai15; public interface IHoatDong {     public String gioithieu(); }

Lớp Nguoi

package bai15; import java.io.Serializable; import java.util.Scanner;  public class Nguoi implements Serializable{     String hoTen;     int namSinh;     boolean gioiTinh;      public Nguoi(){     }      public Nguoi(String hoTen, boolean gioiTinh, int namSinh){         this.hoTen= hoTen;         this.gioiTinh= gioiTinh;         this.namSinh= namSinh;     }      public String getHoTen() {         return hoTen;     }      public void setHoTen(String hoTen) {         this.hoTen = hoTen;     }      public boolean isGioiTinh() {         return gioiTinh;     }      public void setGioiTinh(boolean gioiTinh) {         this.gioiTinh = gioiTinh;     }      public int getNamSinh() {         return namSinh;     }      public void setNamSinh(int namSinh) {         this.namSinh = namSinh;     }      public void nhap(){         Scanner sc= new Scanner(System.in);         byte i;         while(true){             try {                 System.out.println("Nhap ho va ten: ");                 hoTen= sc.nextLine();;                 System.out.println("Nhap nam sinh: ");                 namSinh= sc.nextInt();                 System.out.println("Gioi tinh(1:Nam - 0:Nu): ");                 i=sc.nextByte();                 if(namSinh=0) throw new Exception();                 break;             } catch (Exception e) {                 System.out.print("Nhap sai gia tri, nhap lai!\n");                 sc.nextLine();             }         }         sc.nextLine();         if(i==1) gioiTinh=true;         else gioiTinh=false;     }      public String hien(){         String gt= null;         if(gioiTinh) {             gt="Nam";         }else{             gt="Nu";         }         String output = String.format("%-30s|%-8d|%-9s|",hoTen,namSinh,gt);         return output;     } }

Lớp HocSinh thừa kế từ lớp Nguoi

package bai15; import java.io.Serializable; import java.util.Scanner;  public class HocSinh extends Nguoi implements Serializable, IHoatDong{     String lop;      public HocSinh(){     }      public HocSinh(String hoTen, boolean gioiTinh, int namSinh, String lop){         super(hoTen, gioiTinh, namSinh);         this.lop= lop;     }      public void nhap(){         Scanner sc= new Scanner(System.in);         super.nhap();         System.out.println("Nhap lop: ");         lop= sc.nextLine();     }      @Override     public String gioithieu() {         String output = String.format(super.hien()+"%-7s",lop);         return output;     } }

Đọc lưu file với FileInputStream

package bai15; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner;  public class DanhSach {     ArrayList ds= new ArrayList>();     int n;     Scanner sc = new Scanner(System.in);      public void nhapDS(){         System.out.println("Nhap so hoc sinh: ");         n= sc.nextInt();         for(int i=0;i

Kết quả

File tải full code:

Trên đây là chương trình đọc lưu file danh sách học sinh với FileInputStream. Cảm ơn các bạn đã tham khảo trên ttnguyen.net.

Bài viết liên quan:

  • Nhập xuất mảng trong Java
  • Bài thực hành 2: xuất ra n số đầu tiên của dãy Fibonacci trong Java
  • Bài thực hành 3: tính diện tích tam giác theo công thức Heron trong Java
1