2013-11-04 2 views
0

데이터 지속성이 약간 필요한 Bukkit 플러그인을 작성하고 있습니다. 다음은 ArrayList of Project를 파일에 저장하기 위해 만든 코드입니다.(닫힘) Java 직렬화가 작동하지 않습니다.

public class Project implements Serializable {...} 

그것은 파일을 생성합니다,하지만 아무것도가 저장되지 않습니다

private ArrayList<Project> projects = new ArrayList<Project>; 
private String filename = "plugins\\ProjectManager\\projects.cfg"; 


try { 
    FileOutputStream fos = new FileOutputStream(new File(filename)); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 

    oos.writeObject(projects); 
    oos.close(); 
} catch (Exception e) { 
    getLogger().severe("Unable to save projects to file. Data may have been lost."); 
} 

. 무엇이 잘못 될지에 대한 아이디어가 있습니까?


좋아요. 저는 이것을 비공식적으로 닫습니다. 직렬화 할 수없는 클래스의 다른 종속성 때문에이 방법으로 저장하는 것은 불가능합니다. 모든 도움을 주셔서 감사합니다.

+4

당신이 코드의'catch' 블록에서 예외 스택 트레이스를 기록 할 경우 그것은 좋은 것입니다 작동합니다. –

+0

코드가 컴파일되지 않습니다. 닫을 때 어떤 일이 일어날 지 잘 모르겠지만'flush()'를 명시 적으로 호출하십시오. –

+0

아마도 Project의 일부 하위 구성 요소가 직렬화 할 수 없다는 오류 메시지가 표시됩니다. –

답변

0

문제는 귀하가 우리에게 표시하지 않는 코드 또는 오류입니다. 이 예는

class Main { 
    public static void main(String[] ignored) throws IOException, ClassNotFoundException { 
     String filename = "config.data"; 

     List<Project> projects = new ArrayList<Project>(); 
     projects.add(new Project()); 
     projects.add(new Project()); 
     projects.add(new Project()); 

     FileOutputStream fos = new FileOutputStream(new File(filename)); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 

     oos.writeObject(projects); 
     oos.close(); 

     ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename)); 
     List<Project> projects2 = (List<Project>) ois.readObject(); 
     ois.close(); 
     System.out.println("There was " + projects2.size() + " projects saved"); 
    } 

    static class Project implements Serializable { 

    } 
} 

인쇄

There was 3 projects saved 
관련 문제