2013-12-09 2 views
0

내가 가진 파일 몇 가지 기본 클래스 개체, 그 데이터를 저장 :직렬화의

class Item implements java.io.Serializable { 
    String this.data = ""; 
    public void saveData(String data) { 
     this.data = data; 
    } 
    public String getData() { 
     return this.data; 
    } 
} 

그리고 파일에 항목 인스턴스를 저장하도록되어 다른 클래스에서 함수 :

private static void saveItemToFile(File folder, Item item) throws IOException{ 
    FileOutputStream fos = new FileOutputStream(
      folder.getAbsolutePath() + item.getData() + ".obj"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(item); 
    oos.close(); 
} 

테스트 코드 :

Item itm = new Item(); 
itm.saveData("String data here"); 
File folder = new File(System.getProperty("user.home") + "/.CDDB"); 
saveItemToFile(folder, itm); 

하지만이 코드는 작동하지 않습니다. 오류나 예외가 발생하지 않지만 지정된 폴더에 파일을 만들지 않습니다. 내 실수는 무엇입니까?

목적지 경로가 경로 구분없이 디렉토리 경로에 파일 이름을 추가하여 구축
+0

빨리 더 도움 들어, [SSCCE] (http://sscce.org/)을 게시 할 수 있습니다. –

+2

String this.data = ""; ?? –

+0

마지막 부분에 대한 전체 코드를 표시하십시오. 당신은 어딘가에'IOException'을 처리해야하지만, 나는 그것을 보지 못했고, 당신이 던져지고있는 예외를 삼키고 있다고 의심합니다. (아마도'folder'는 존재하지 않습니다). 또한'saveItemToFile' 호출 전에'folder'의 값을 디버그하고 검사하고'new FileOutputStream'에 전달되는 값을 검사하십시오. – chrylis

답변

2

:

folder.getAbsolutePath() + item.getName() + ".obj" 

그래서 당신은 파일 특성을가집니다라는 [USER_HOME]/.CDDB[item name].obj

더 나은 사용 File 객체 대신 직접 :

private static void saveItemToFile(File folder, Item item) throws IOException { 
    File file = new File(folder, item.getName() + ".obj"); 
    try (ObjectOutputStream oos = 
      new ObjectOutputStream(new FileOutputStream(file))) { 
     oos.writeObject(item); 
    } 
} 
0

이 코드는 완벽하게 작동하며, 생성 된 파일의 잘못된 폴더를 찾는 것일 수 있습니다. 유일한 것은 파일 이름과 함께 .CDDB을 추가하는 것입니다. user.home 폴더를 찾을 수 없다면, 아래의 라인을 추가하여 객체 serailiaze 객체가 어디에 인쇄되어 있는지 확인하십시오.

System.out.println("--- output path "+System.getProperty("user.home")); 

그렇지 않으면 매개 변수 System.getProperty("user.home") + "/.CDDB"File 개체를 만들고

0

를 OutputStream에 통과 내가 RAN에게 프로그램을 컴파일, 이것은 내가 관찰 무엇 :

파일이의 이름으로 생성 된 .CDDBString data here.obj

나는 String data here.obj이라는 파일을 의도했지만 saveItemToFile에 파일 이름을 얻기 위해 함께 폴더와 파일 이름을 연결한다고 생각합니다. 경로 구분 기호없이

트릭을 수행해야합니다

private static void saveItemToFile(File folder, Item item) throws IOException{ 
    File out = new File(folder, item.getData() + ".obj"); 
    FileOutputStream fos = new FileOutputStream(out); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(item); 
    oos.close(); 
} 
관련 문제