객체를 파일로 출력하기 위해 FileOutputStream 객체를 하나 만들고 writeObject() 함수를 이용해서
출력을 시키는 함수를 하나 만들었습니다.
그런데 FileOutputStream 객체를 만들때 FileOutputStream(FileName,true) 생성자에 true값을 주어
해당 함수가 불려질때 마다 객체를 이미 있는 파일 뒤에 이어서 저장되도록 하였습니다.
그리고 FileInputStream 객체를 만들고 readObject() 함수를 이용해서
저장한 객체를 읽어들이는 함수 만들었습니다.
그런데 readObject를 함수를 이용하면 파일에 제일 처음에 저장된 객체만 리턴되어 돌아외고
다음번 readObject함수부터는 다음번에 저장된 객체가 읽혀 오지 않고 에러가 발생합니다.
파일에 저장된 객체 정보를 계속적으로 읽어오게 할려면 어떻게 해야 하나요?
밑에 코드가 제가 작성한 코드입니다.
public void SaveToFile(Schedule_Data sd)
{
System.out.println(\"SaveToFile start..\");
String FileName = new String(\"d:/schedule.txt\"); //저장위치 및 파일명
FileOutputStream fout = null;
ObjectOutputStream out = null;
try {
fout = new FileOutputStream(FileName,true);
out = new ObjectOutputStream(fout);
out.writeObject(sd);
out.flush();
out.close();
fout.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void ReadFromFile()
{
System.out.println(\"ReadFromFile start..\");
String FileName = new String(\"d:/schedule.txt\"); //읽어올 파일명
FileInputStream fin = null;
ObjectInputStream in = null;
Schedule_Data[] sd = new Schedule_Data[10];
try {
fin = new FileInputStream(FileName);
in = new ObjectInputStream(fin);
try{
Schedule_Data temp;
int i=0;
while((temp =(Schedule_Data)in.readObject())!=null)
{
sd[i] = new Schedule_Data();
sd[i] = temp;
i++;
}
}catch(ClassNotFoundException e)
{
e.printStackTrace();
}
in.close();
fin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
스케쥴데이터 하나만 들어있나보지 뭐
여러개 있음
혹시 Sington패턴이나 이런거 사용해서 만든거 아니지?
네
저 파일 처리하는 Class 전문을 봐야할거 같은데.
클래스 내부에서 선언해서 사용하는 변수는 없어 보이는데. 음..딱히 이유는 모르겠고 쓰는건 되는데 읽는게 안된다는 거지? 루프에서 Line By Line으로 디버깅해보면서 원인을 찾아봐야할듯
스케줄데이터 클래스가 어떤 모양인지 궁금
이유는 하나뿐인것 같은데.. 쓸때 객체가 하나만 저장됐다는 경우지 모... 잘 확인해봐
별거 없습니다. 그냥 private String date ,time,Schedule 등이 있고 set과 get함수를 만들어두었습니다. 물론 implement serialzable 이고요
혹시나 해서 그러는데요. ((temp =(Schedule_Data)in.readObject())!=null) 이부분을 ((temp =(Schedule_Data)in.readObject())!=-1) 해봐도 그런가요? 혹시나 해서요
그리고 에러나는 부분 구경좀 했으면 ..;;
에러나는 스택트레이스 올려봥. 그거 보면 알수 있을거 아닌가.