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);
}
}
}
Bài liên quan
Bạn đăng kết quả lên xem nào
Thằng Person chưa implement Serializable kìa bạn
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
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 fileEdited: 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