01/10/2018, 09:35

Lỗi ghi File đối tượng trong java

a/c giúp e với
Tại sao nó không ghi được tất cả thông tjn lớp “kySu” ra được vậy ?
mà trong Khi đó Lớp KySu Đã kế thừa lớp Person rôì ạ

Lớp Person

    public class Person {
    	protected String hoTen;
    	protected String ngaySinh;
    	protected String queQuan;
    	
    	public Person() {
    	}
    	public Person(String hoTen, String ngaySinh, String queQuan) {
    		super();
    		this.hoTen = hoTen;
    		this.ngaySinh = ngaySinh;
    		this.queQuan = queQuan;
    	}
    	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 getQueQuan() {
    		return queQuan;
    	}
    	public void setQueQuan(String queQuan) {
    		this.queQuan = queQuan;
    	}
    	@Override
    	public String toString() {
    		
    		return " [hoTen=" + hoTen + ", ngaySinh=" + ngaySinh + ", queQuan=" + queQuan + "]";
    	}

Lớp KySu

public class KySu extends Person implements Serializable{
	private String ngayHoc;
	private int namTotNghep;
     public KySu() {
		
	}
	
	public KySu(String hoTen, String ngaySinh, String queQuan,String ngayHoc, int namTotNghep) {
		super(hoTen, ngaySinh, queQuan);
		this.ngayHoc = ngayHoc;
		this.namTotNghep = namTotNghep;
	}
	
	public String getNgayHoc() {
		return ngayHoc;
	}
	public void setNgayHoc(String ngayHoc) {
		this.ngayHoc = ngayHoc;
	}
	public int getNamTotNghep() {
		return namTotNghep;
	}
	public void setNamTotNghep(int namTotNghep) {
		this.namTotNghep = namTotNghep;
	}
	@Override
	public String toString() {
		return "KySu [hoTen=" + this.hoTen + ", ngaySinh=" +this.ngaySinh + ", queQuan=" +this.queQuan + "ngayHoc=" + this.ngayHoc + ", namTotNghep=" + namTotNghep + "]";
	}
	public int compareTo(KySu ts) {
		// TODO Auto-generated method stub
		if (this.getNamTotNghep() > ts.getNamTotNghep())
			return -1;
		if (this.getNamTotNghep()== ts.getNamTotNghep())
			return this.ngayHoc.compareTo(ts.getNgayHoc());
		
		return 1;
	
	
	}
}

Test SeriarlizableFileFactory

public class SeriarlizableFileFactory {
	public static boolean ghiFile(ArrayList<KySu> ds,String path)
	{
		try
		{
			FileOutputStream fos=new FileOutputStream(path);
			ObjectOutputStream oos=new ObjectOutputStream(fos);
			oos.writeObject(ds);
			oos.close();
			fos.close();
			return true;	
		}
		catch(Exception e)
		{
		  e.printStackTrace();	
		}
		return false;
		
	}
	public static ArrayList<KySu>docfile(String path)
	{
		ArrayList<KySu>ds=new ArrayList<KySu>();
		try
		{
			FileInputStream fs=new FileInputStream(path);
			ObjectInputStream ols=new ObjectInputStream(fs);
			Object data=ols.readObject();
			ds=(ArrayList<KySu>) data;
			ols.close();
			fs.close();
		}
		catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return ds;
	}

}

Test

public class Test {
	public static void luFile()
	{
		ArrayList<KySu> ds =new  ArrayList<KySu>();
		ds.add(new KySu("nguyen van b","17","nam","12",1));
		ds.add(new KySu("nguyen van c","19","nam","12",34));
		if(SeriarlizableFileFactory.ghiFile(ds,"D:/text.txt"))
		{
			System.out.println("gh danh sach thành công");
		}
		else
			System.out.println("gh danh sach thất bại");
	}
	public static void main(String[] args) {
//		luFile();
		ArrayList<KySu> ds2=SeriarlizableFileFactory.docfile("D:/text.txt");
		System.out.println("danh sách khách hang");
		for(KySu dsh:ds2)
		{
				
			System.out.println(dsh);
		}
	}

}
Tynk Huynk viết 11:39 ngày 01/10/2018

Bạn đăng kết quả lên xem nào

Nhuyngo Nhuyngo95 viết 11:47 ngày 01/10/2018

Tynk Huynk viết 11:47 ngày 01/10/2018

Thằng Person chưa implement Serializable kìa bạn

Nhuyngo Nhuyngo95 viết 11:50 ngày 01/10/2018

bạn ơi các thuộc tính của lớp person kế thừa từ lớp Kỹ sư rồi mà sao cần phải Serializable từ lớp Person vậy bạn

Phan Bá Hải viết 11:40 ngày 01/10/2018
public KySu(String hoTen, String ngaySinh, String queQuan,String ngayHoc, int namTotNghep) {
	super(hoTen, ngaySinh, queQuan);
	this.ngayHoc = ngayHoc;
	this.namTotNghep = namTotNghep;
}

Do super(hoTen, ngaySinh, queQuan); sẽ gọi constructor của lớp cha, cụ thể là Person. Trong khi lớp cha không implements Serializable thì sẽ không thể Serializable ra object để ghi ra file

Tynk Huynk viết 11:36 ngày 01/10/2018

Edited: If superclass is not Serializable then all values of the instance variables inherited from super class will be initialized by calling no-arg constructor of Non-Serializable Super class during deserialization process. Now you can see your no-arg constructor of Person, it does nothing so values of the instance Person’s states are getting null (default value for String object)

Sorry: My Unikey is crash, couldnt type Vietnamese

Bài liên quan
0