Lỗi "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 " trong java phần ghi và đọc file

Em có đang làm 1 bài tập ghi đọc danh sách giảng viên lúc ghi danh sách thì đc nhưng khi đọc danh sách và in ra màn hình thì gặp lỗi này =.=

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	 at Function.FnDocGhiFile.docFileGIANGVIEN(FnDocGhiFile.java:49)
	at Object.DSGIANGVIEN.xuatDSGIANGVIEN(DSGIANGVIEN.java:37)
	at Object.Main.main(Main.java:25)

chưa biết tại sao lại lỗi như vậy anh chị nào giúp e với ạ

GIANGVIEN

 package Object;
  import java.io.Serializable;
  import java.util.Scanner;
   public class GIANGVIEN  implements Serializable{
    private String MaGV;
 private String Hoten;
 private String Ngaysinh;
 private String Gioitinh;
 private String Diachi;
 private String Tenmon;
  public String getMaGV() {
     return MaGV;
 }
 public void setMaGV(String MaGV) {
     this.MaGV = MaGV;
 }
  public String getHoten() {
     return Hoten;
 }
 public void setHoten(String Hoten) {
     this.Hoten = Hoten;
 }
 public String getNgaysinh() {
     return Ngaysinh;
 }
 public void setNgaysinh(String Ngaysinh) {
     this.Ngaysinh = Ngaysinh;
 }
  public String getGioitinh() {
     return Gioitinh;
 }
 public void setGioitinh(String Gioitinh) {
     this.Gioitinh = Gioitinh;
 }
  public String getDiachi() {
     return Diachi;
 }
 public void setDiachi(String Diachi) {
     this.Diachi = Diachi;
 }
  public String getTenmon() {
     return Tenmon;
 }
 public void setTenmon(String Tenmon) {
     this.Tenmon = Tenmon;
 }
    public void CanBo(String ma, String ht, String ns, String gt, String dc,String tm) 
    {
     MaGV = ma;
     Hoten = ht;
     Ngaysinh = ns;
     Gioitinh = gt;
     Diachi = dc;
     Tenmon=tm;
     }
      public void nhapGV() {
     Scanner sc = new Scanner(System.in);
     System.out.print(" Nhập mã: ");
     MaGV = sc.nextLine();
     System.out.print(" Nhập họ tên: ");
     Hoten = sc.nextLine();
     System.out.print(" Nhập ngày sinh: ");
     Ngaysinh = sc.nextLine();
     System.out.print(" Nhập giới tính: ");
     Gioitinh = sc.nextLine();
     System.out.print(" Nhập địa chỉ: ");
     Diachi = sc.nextLine();
     System.out.print(" Nhập Tên môn:");
     Tenmon = sc.nextLine();
 }
     public void xuatChiTietGV() {
     System.out.print(" Mã: " + MaGV);
     System.out.print(" Họ tên: " + Hoten);
     System.out.print(" Ngày sinh: " + Ngaysinh);
     System.out.print(" Giới tính: " + Gioitinh);
     System.out.print(" Quê quán: " + Diachi);
     System.out.print(" Tên Môn: " + Tenmon);
 }
       public void xuatGV() {
     System.out.printf("\n | %7s      | %20s   | %15s   | %6s     |  %15s   |   %6s   |", MaGV, Hoten, Ngaysinh, Gioitinh,Diachi,Tenmon);
 } 
      public String toString()
      {
      return"\n Mã Giảng Viên :"+ MaGV+ "Họ Tên:"+ Hoten+"Ngày Sinh :"+ Ngaysinh+"Giới Tính :"+Gioitinh+"Địa Chỉ"+Diachi+"Tên Môn"+Tenmon;
      }
      public void display()
      {
          System.out.println(toString());
      }
 }

DSGIANHVIEN

package Object;
import Function.FnDocGhiFile;
import Object.GIANGVIEN;
import java.io.FileNotFoundException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
public class DSGIANGVIEN {
     File fileName = new File("GIANGVIEN.txt");
    ArrayList<GIANGVIEN> DSGIANGVIEN = new ArrayList<>();
    int n,i;
    Scanner sc = new Scanner(System.in);
        public void nhapDSGIANGVIEN() throws IOException{
        System.out.print("Nhập số Giảng viên:");
        n = sc.nextInt();
        for(i=0;i<n;i++)
        {
            GIANGVIEN GV = new GIANGVIEN();
            GV.nhapGV();
            DSGIANGVIEN.add(GV);   
        }
        FnDocGhiFile.ghiFileGIANGVIEN(fileName, DSGIANGVIEN, true);  
    }
     public void xuatDSGIANGVIEN() throws IOException{
          DSGIANGVIEN = new ArrayList<>();
          DSGIANGVIEN=FnDocGhiFile.docFileGIANGVIEN(fileName);
          System.out.println("DANH SACH GIANG VIEN: ");
        System.out.print("\n\n ---------------------------------------------------------------------------------\n");
        System.out.printf("\n |Mã Buổi dạy : |      Họ tên:     |Ngày sinh:  |Giới tính:  |   Diachi    |tenmon");
            for (GIANGVIEN st: DSGIANGVIEN) {
           DSGIANGVIEN.get(i).xuatGV();
            i++;
        }
     }      
    
}

FnGhiDocFile

package Function;
import Object.GIANGVIEN;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FnDocGhiFile {
    public static void ghiFileGIANGVIEN(File fileName, ArrayList<GIANGVIEN> listGVCT, boolean isAppend) {
        BufferedWriter writer = null;
        try {
            writer = new BufferedWriter(new FileWriter(fileName, isAppend));
            for (GIANGVIEN giangvien : listGVCT) {
                writer.write(giangvien.toString());
            }
        } catch (IOException e) {
        } finally {
            try {
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
            }
        }
    }
    public static ArrayList<GIANGVIEN> docFileGIANGVIEN(File fileName) throws IOException {
        ArrayList<GIANGVIEN> listGVCT = new ArrayList<>();
        BufferedReader br = null;
        String sCurrentLine;
        try {      
            br = new BufferedReader(new FileReader(fileName));
            if(!br.ready())
            {throw new IOException();
            } while((sCurrentLine= br.readLine()) !=null)
                    {  String[] arrayString = sCurrentLine.split("~");
                        GIANGVIEN giangvien=new GIANGVIEN();
                        giangvien.setMaGV(arrayString[0]);
                        giangvien.setHoten(arrayString[1]);
                        giangvien.setNgaysinh(arrayString[2]);
                        giangvien.setGioitinh(arrayString[3]);
                        giangvien.setDiachi(arrayString[4]);
                        giangvien.setTenmon(arrayString[5]);
                        listGVCT.add(giangvien);
                    }
            } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return listGVCT;
        } 
    }

phần Main.

package Object;

import java.io.IOException;
import java.util.Scanner;

public class Main {
 public static void main(String arg[]) throws IOException
 {
     DSGIANGVIEN dsgv= new DSGIANGVIEN();
     int chon;
     Scanner sc = new Scanner(System.in);
   for(int i=0;;i++) {
       System.out.print("\n 1: Nhập thêm giảng viên: ");
        System.out.print("\n 2: Hiển thị danh sách GV ");
       System.out.print("\n Mời nhập lựa chọn (0-2): ");
       chon = sc.nextInt();
        switch (chon) {
            case 1:
                dsgv.nhapDSGIANGVIEN();
                break;
            case 2:
                dsgv.xuatDSGIANGVIEN();
                break;
        }
    }
 }
}

Anh chị có thể xem qua cho e hỏi phần đọc file sai ntn được không ạ =.= e ngồi cả ngày chưa sửa đc

Tập tin chứa dữ liệu Giảng viên của bạn có dòng cuối cùng trống. Tức là nó bằng "".
Hoặc có bất kì dòng nào trống thì cũng xảy ra lỗi đó.

Bạn nên kiểm tra mảng arrayString trước khi gán nó cho đối tượng GIANGVIEN.
Theo mã thì arrayString phải đủ 6 phần tử, nếu thiếu sẽ bị lỗi như trên.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?