Baza Biblioteki problemy

0

Jako że to mój pierwszy post witam wszystkich

Oto mój program który obecnie pisze, nie mam pojęcia skąd, ale nagle pojawił mi się błąd:

Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to library.Biblioteka
	at library.Biblioteka.odczytKsiazek(Biblioteka.java:102)
	at library.ProsteMenu$Baza_Biblioteki.main(ProsteMenu.java:52)

Pomoże ktoś ? Jak jeszcze działało, to miałem problem z zapisaniem zmian w książkach za pomocą zmianaDanych() nie wiem jak podmienić tylko te wartości które chce, z tym bym tez prosił o pomoc

package library;

import java.io.*;
import java.util.Scanner;

public class ProsteMenu {

	public static void wyswietlMenu() {
		// czyscEkran();
		String menu = "============================================\n"
				+ "||              == MENU ==                ||\n"
				+ "============================================\n"
				+ "1. Wyswietlanie listy ksiazek w skróconym formacie\n"
				+ "2. Wyswietlanie listy ksiazek w pełnym formacie\n"
				+ "3. Dodawanie książek\n" + "4. Modyfikacja danych książki\n"
				+ "0. Koniec";
		System.out.println(menu);
	}

	public static void pelenZapisKsiazek() throws IOException {
		Biblioteka z = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");
		for (int i = 0; i < z.ileKsiazek; i++) {
			System.out.print(z.ksiazki[i].id + " " + z.ksiazki[i].tytul + " "
					+ z.ksiazki[i].imionaAutora + " "
					+ z.ksiazki[i].nazwiskoAutora + " " + z.ksiazki[i].rok
					+ " ");

			for (int x = 0; x < z.ksiazki[i].kategorie.length; x++)
				System.out.print(z.ksiazki[i].kategorie[x] + " ");

			System.out.println(z.ksiazki[i].czyWypozyczona);
		}
	}

	public static void skroconyZapisKsiazek() throws IOException {
		Biblioteka z = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");
		for (int i = 0; i < z.ileKsiazek; i++) {
			System.out.print(z.ksiazki[i].id + " " + z.ksiazki[i].imionaAutora
					+ " " + z.ksiazki[i].nazwiskoAutora + " "
					+ z.ksiazki[i].tytul + " ");
			for (int x = 0; x < z.ksiazki[i].kategorie.length; x++)
				System.out.print(z.ksiazki[i].kategorie[x] + " ");
			System.out.println(z.ksiazki[i].czyWypozyczona);
		}
	}

	public static class Baza_Biblioteki implements Serializable {

		public static void main(String[] args) throws IOException,
				ClassNotFoundException {

			Biblioteka z = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");

			Scanner in = new Scanner(System.in);
			wyswietlMenu();
			System.out.print("Wybierz opcję:");
			int wybor = in.nextInt();
			while (wybor != 0) { // powtarzaj dopóki użytkownik nie poda 0
				switch (wybor) {
				case 1:
					skroconyZapisKsiazek();
					break;
				case 2:
					pelenZapisKsiazek();
					break;
				case 3: {
					z.dodajKsiazke();
					z.zapiszDoPliku("D:\\Biblioteka.dat");
				}
					break;
				case 4: {
					// System.out.print("Podaj Id książkai: ");
					// int l=in.nextInt();
					// z.zmianaDanych("D:\\Biblioteka.dat",l);
				}
					break;
				default:
					System.out.println("Nie ma takiej opcji!");
				}
				wyswietlMenu();
				System.out.print("Wybierz opcję:");
				wybor = in.nextInt();
			}
		}

	}

}


```java
package library;

import java.io.*;

import java.util.Scanner;

public class Biblioteka implements Serializable {
	public static final long serialVersionUID = 5071368412419619264L;
	public Ksiazka[] ksiazki;
	public int maxKsiazek;
	public int ileKsiazek;
	public int kolejneId = 0;
	static Scanner in = new Scanner(System.in);
	public int id;
	public String tytul;

	public String nazwaPliku = "D:\\Biblioteka.dat";

	public Biblioteka() {
		maxKsiazek = 1000;
		ksiazki = new Ksiazka[maxKsiazek];
		ileKsiazek = 0;

	}

	public static String[] wybierzKategorie() {

		String[] kat = { "aa", "bb" };
		String wybKat = "";
		int wybor;
		do {
			System.out.println("Wybierz kategorię:");
			for (int i = 0; i < kat.length; i++) {
				System.out.println((i + 1) + "." + kat[i]);
			}
			System.out.println("0.Koniec");
			wybor = in.nextInt();

			if (wybor != 0) {
				if (wybKat.length() > 0) {
					wybKat += "," + kat[wybor - 1];
				} else {
					wybKat = kat[wybor - 1];
				}
			}

		} while (wybor != 0);

		return wybKat.split(",");
	}

	public void dodajKsiazke() throws IOException {

		if (ileKsiazek < 1000) {
			int id = kolejneId++;
			System.out.print("Tytuł: ");
			String tytul = in.nextLine();
			System.out.println();
			System.out.print("Nazwisko autora: ");
			String nazwiskoAutora = in.nextLine();
			System.out.println();
			System.out.print("Imiona autora: ");
			String imionaAutora = in.nextLine();
			System.out.println();
			System.out.print("Rok wydania: ");
			int rok = in.nextInt();
			System.out.println();
			String[] kat = Biblioteka.wybierzKategorie();

			Ksiazka k1 = new Ksiazka(id, tytul, nazwiskoAutora, imionaAutora,
					rok, kat, false, 0);
			ksiazki[ileKsiazek] = k1;
			ileKsiazek++;
			zapiszDoPliku(nazwaPliku);

		} else {
			System.out.print("Przykro nam, biblioteka jest pełna");
		}

	}

	public void zapiszDoPliku(String nazwaPliku2) throws IOException {
		ObjectOutputStream plik = null;
		try {
			plik = new ObjectOutputStream(new FileOutputStream(nazwaPliku2));
			plik.writeObject(this);

		} finally {
			if (plik != null) {
				plik.close();
			}
		}
	}

	public static Biblioteka odczytKsiazek(String nazwaPliku3)throws IOException {
		ObjectInputStream plik = null;
		Biblioteka z = null;
		try {

			plik = new ObjectInputStream(new FileInputStream(nazwaPliku3));

			z = (Biblioteka) plik.readObject();

		} catch (ClassNotFoundException ex) {
			System.out.println("Nie ma takiej klasy");
		} catch (FileNotFoundException e) {
			return new Biblioteka();
		} finally {
			if (plik != null) {
				plik.close();
			}
		}
		return z;

	}

	public static void wyswietlMenu2() {
		// czyscEkran();
		String menu = "============================================\n"
				+ "||              == Zmień ==                ||\n"
				+ "============================================\n"
				+ "1. Tytuł\n" + "2. Imiona autora\n" + "3. Nazwisko\n"
				+ "4. Rok\n" + "5. Kategorie\n" + "0. Koniec";
		System.out.println(menu);
	}

	public static Ksiazka zmianaDanych(String nazwaPliku4, int id2)
			throws IOException {
		ObjectInputStream plik = null;
		Scanner in = new Scanner(System.in);
		try {
			plik = new ObjectInputStream(new FileInputStream(nazwaPliku4));

			Biblioteka a = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");
			Biblioteka q = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");

			for (int i = 0; i < a.ileKsiazek; i++) {
				if (id2 == a.ksiazki[i].id) {
				int i1;
					for (  i1 = 0; i1 < q.ileKsiazek; i1++ ) {
						System.out.print(q.ksiazki[i1].id+" "+ q.ksiazki[i1].tytul+" "+ q.ksiazki[i1].imionaAutora + " " + q.ksiazki[i1].nazwiskoAutora + " " + q.ksiazki[i1].rok + " " );

							for (int x=0;x<q.ksiazki[i1].kategorie.length;x++){
							System.out.print(q.ksiazki[i1].kategorie[x] + " ");
					
						System.out.println(q.ksiazki[i1].czyWypozyczona);
					}	
				
				}}

				wyswietlMenu2();
				System.out.println("Jakie dane chcesz zmienić ?");
				int wybor2 = in.nextInt();
				Biblioteka z = Biblioteka.odczytKsiazek("D:\\Biblioteka.dat");
				while (wybor2 != 0) { // powtarzaj dopóki użytkownik nie poda 0
					switch (wybor2) {
					case 1: 
						System.out.print("Tytuł: ");
						in.nextLine();
						String tytul = in.nextLine();
						
						z.ksiazki[i].tytul = tytul;
					break;
					case 2: {
						System.out.print("Imiona autora: ");
						in.nextLine();
						String imionaAutora = in.nextLine();
						z.ksiazki[i].imionaAutora = imionaAutora;

					}

						break;
					case 3: {
						System.out.print("Nazwisko autora: ");
						in.nextLine();
						String nazwiskoAutora = in.nextLine();
						z.ksiazki[i].nazwiskoAutora = nazwiskoAutora;

					}
						break;
					case 4: {
						System.out.print("Rok wydania: ");
						int rok = in.nextInt();
						z.ksiazki[i].rok = rok;

					}
						break;
					case 5: {
						//String[] kat = Biblioteka.wybierzKategorie();
					}
						break;
					default:
						System.out.println("Nie ma takiej opcji!");
					}
					wyswietlMenu2();
					System.out.print("Wybierz opcję:");
					wybor2 = in.nextInt();
				}
			}
			
		} finally {
			if (plik != null) {
				plik.close();
			}
		}
		return null;
	}
}

package library;

import java.io.*;

public class Ksiazka implements Serializable {
	private static final long serialVersionUID = 5038991704219001037L;
	public int id;
	public String tytul;
	public String nazwiskoAutora;
	public String imionaAutora;
	public int rok;
	public String[] kategorie;
	public boolean czyWypozyczona = false; // domyślnie książka jest w zasobach
	// biblioteki
	int liczbaWypozyczen; // ile razy książka została wypożyczona i zwrócona

	public Ksiazka(int id, String tytul, String nazwiskoAutora,
			String imionaAutora, int rok, String[] kategorie,
			boolean czyWypozyczona, int liczbaWypozyczen) {

		this.id = id;
		this.tytul = tytul;
		this.nazwiskoAutora = nazwiskoAutora;
		this.imionaAutora = imionaAutora;
		this.rok = rok;
		this.kategorie = new String[kategorie.length];
		for (int i = 0; i < kategorie.length; i++) {
			this.kategorie[i] = kategorie[i];
		}
		this.czyWypozyczona = czyWypozyczona;
		this.liczbaWypozyczen = liczbaWypozyczen;

	}

}

0

Ale o co chodzi? Przecież trace jak byk mówi od razu co jest źle

z = (Biblioteka) plik.readObject();

próbujesz tutaj rzutować obiekt wczytany z pliku na Biblioteka, a ten obiekt w pliku jest typu Class. Sprawdź łaskawie co tak na prawdę zapisujesz w tym pliku.
Podpowiedź: poczytaj co trzeba zrobić żeby serializacja działała poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1