Giúp mình Java I/O
Mình có tạo 1 ObjectOutputStream và ghi vào file dat 1 Vector rồi mình cũng viết luôn hàm đọc file lần chạy đầu tiên thì vẫn bình thường nhưng lần chạy 2 mình tạo thêm 1 phần tử rồi mình chạy thì kết quả vẫn hiện ra là kết quả của lần chạy thứ nhất mặc dù không xảy ra lỗi gì ai giúp m với Code :
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
public class NewClass {
public static void main(String[] args) {
ghiFile();
docFile();
}
public static void ghiFile() {
Vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
v.add(5);
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/aa.dat", true));
oos.writeObject(v);
oos.close();
} catch (IOException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void docFile() {
Vector v = new Vector();
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:/aa.dat"));
v = (Vector) ois.readObject();
ois.close();
} catch (IOException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(v);
}
}
Hình như Vector trong java cần thêm kiểu dữ liệu generic nữa thì phải.
Ví dụ
Có thể không cần. Lí do là vấn đề compatibility giữa các bản JDK.
Dòng này bạn để append = true nghĩa là khi bạn ghi object mới vào file thì object đó sẽ được ghi vào tiếp sau object cũ. Bạn có thể test bằng cách chạy đi chạy lại chương trình sẽ thấy dung lượng file tăng lên rõ rệt
Dòng này chỉ đọc Object đầu tiên trong file, nên bạn vẫn thấy cái Object đầu tiên mà bạn ghi vào.
Thế có cách nào đọc hết không bạn
Mình nghĩ bạn không nên đọc thẳng vào kiểu dữ liệu là Vector mà nên dùng while để đọc lần lượt từng Object. Sau đó mới push vào vector.
M dùng while((v=ois.readObject)!=null) nhưng bị lỗi StreamCorruptedException
Thrown when control information that was read from an object stream violates internal consistency checks.
Bạn đọc như thế là bạn đọc vào cả Vector v rồi.
Bạn thử đọc từng object con rồi push vào Vector v ấy.
Bạn chỉ rõ cho mình tí được không mình dùng while rồi đọc bằng mảng Object rồi lấy Vector add cũng không được