2010-12-10 6 views
0

libraryDB, libraryItems 및 libraryGUI의 세 클래스가 있습니다. libraryDB()는 본질적으로 책 바코드/ISBN과 같은 키가있는 해시 맵이며 값은 libraryItems로 구성되어 있으므로 두 개의 String 매개 변수 인 Title과 Author를 사용합니다.GUI를 통한 Java 파일 출력/입력

저장하려면 GUI에 JFileChooser가 모두 설정되어 있지만 save() 및 open() 메서드는 문제가 있습니다. 나는 그것이 저장 될 때마다 각각의 libraryDB 객체가 자신의 3 줄 (바코드, 제목, 저자 각각에 대해 각각 하나씩)을 갖도록 설정하기를 원한다. 나는 여기에 내가 그것에 대해 쓴 코드는, 각 개별 라인을 읽어에서 다시로드 시도 :

//Suppose to construct a LibraryDB by reading one from a previously-saved file. 
    public LibraryDB (File file) throws IOException { 
     Scanner readFile = new Scanner(file); 
     int barcode; 
     String title; 
     String author; 

     while (readFile.hasNext()){ 
      barcode = Integer.parseInt(readFile.nextLine()); 
      title = readFile.nextLine(); 
      author = readFile.nextLine(); 
      LibraryItem authorTitleValues = new LibraryItem(title,author); 
      this.libraryItems.put(barcode, authorTitleValues); 
      } 
    } 
//Trying to save to text file, where for each object n there are 3n lines. 
    public void save(File file) throws IOException { 
    PrintStream writer = new PrintStream(file); 
    for (Iterator<Integer> localIterator = libraryItems.keySet().iterator(); 
    localIterator.hasNext();){ 
     int barcode = ((Integer)localIterator.next()).intValue(); 
     writer.println(barcode); 
     writer.println((libraryItems.get(Integer.valueOf(barcode))).getTitle()); 
     writer.println((libraryItems.get(Integer.valueOf(barcode))).getAuthor()); 
     } 
    } 

당신이 성공적으로 열기/저장 할 것 인 나에게 도움이됩니다 제공 할 수있는 어떤 도움이나 통찰력 많이 감사하겠습니다! 감사!

더 자세히 설명하면 libraryDB를 파일에 저장할 때마다 나중에 되돌아 가서 파일을 열 수 없습니까?

+1

정확한 문제는 무엇인가요? – Joel

+0

파일을 저장할 때 다시 돌아가서 다시 열 수 없으므로 더 명확히하지 않아서 미안합니다. 아마 어딘가에 약간의 호환이있을 수 있습니까? –

+0

파일이 제대로 직렬화되었는지 확인 했습니까? 그것이 있어야하는 행이 있습니까? – bezmax

답변

0

그래서 libraryDB를 재 선언하는 것을 잊어 버렸습니다! Grrr ... lol 나는 컴파일러가 이미 선언 되었기 때문에 불평 할 것이라고 생각하지 않는다. 그러나 파일에서 읽혀지는 정보는 그 파일을 넣을 대상이 없으므로 망각 또는 무언가로 들어갔다. 적어도 그것은 내가 생각하는 것입니다. 당신의 도움을 주셔서 감사합니다. 여기 내 해결책은 다음과 같습니다.

public LibraryDB (File file) throws IOException { 
//this next line was what I was missing...sigh. 
    this.libraryItems = new HashMap<Integer, LibraryItem>(); 
     Scanner readFile = new Scanner(file); 
     int barcode; 
     String title; 
     String author; 
     while (readFile.hasNext()){ 
      barcode = Integer.parseInt(readFile.nextLine()); 
      title = readFile.nextLine(); 
      author = readFile.nextLine(); 
      LibraryItem authorTitleValues = new LibraryItem(title, author); 
      libraryItems.put(Integer.valueOf(barcode), authorTitleValues); 
      } 
     readFile.close(); 
    } 
0

save 기능을 종료하기 전에 PrintStreamflush()close()을 입력해야합니다. 귀하의 설명이 너무 정확하지 않기 때문에 문제가 될지 모르지만 어쨌든해야합니다.

+0

그래, 여전히 작동하지 않습니다. 시도해 줘서 고마워. –

+0

무엇이 일어나고 있는지 더 설명해야합니다 ... "작동하지 않음"으로는 충분하지 않습니다. – Flavio

0

파일 스트림과 기록기는 파일 쓰기가 끝날 때 명시 적으로 닫아야합니다. 그렇지 않으면 파일을 잠급니다.

public void save(File file) throws IOException { 
    PrintStream writer = new PrintStream(file); 
    try { 
     for (Iterator<Integer> localIterator = libraryItems.keySet().iterator(); localIterator.hasNext();) { 
      int barcode = ((Integer) localIterator.next()).intValue(); 
      writer.println(barcode); 
      writer.println((libraryItems.get(Integer.valueOf(barcode))).getTitle()); 
      writer.println((libraryItems.get(Integer.valueOf(barcode))).getAuthor()); 
     } 
     writer.flush(); 
    } finally { 
     writer.close(); 
    } 
}