Java odczyt wszystkich plików z folderu

0

Witam,

Robię bazę filmów w Javie i chcę napisać metodę wyświetlającą wszystkie filmy w bazie. Zapis filmów do pliku zorganizowałem metodą 1 obiekt = 1 plik i teraz chcę wypisać na ekran wszystkie obiekty z folderu. Napisałem taką to metodę:

public static void listFilesForFolder(final File folder)throws IOException,ClassNotFoundException 
    {
        for (final File fileEntry : folder.listFiles()) 
        {
            if (fileEntry.isDirectory()) 
            {
                listFilesForFolder(fileEntry);
            } 
            else 
            {
                ObjectInputStream pl2=null;
                Filmy film = null;
                try{
                    nazwaPL = fileEntry.getName();
                    pl2 = new ObjectInputStream(new FileInputStream("E:/JAVA/Wypożyczalnia flimów/Filmy/"+nazwaPL));
                    int l=1;
                    while(true)
                    {
                        film = (Filmy)pl2.readObject();
                        System.out.println("\nFilm " + l++);
                        film.odczyt();
                    }
                   } 
                catch (EOFException ex) 
                    {
                        System.out.println("Koniec pliku");
                    }
                finally
                    {
                        if(pl2!=null)
                        pl2.close();
                    }
             }
        }

A wywołuję ją tak:

f

inal File folder = new File("E:/JAVA/Wypożyczalnia flimów/Filmy");
Filmy.listFilesForFolder(folder);

I otrzymuję takie coś, gdy uruchamiam metodę:

Exception in thread "main" java.io.InvalidClassException: wypożyczalnia.flimów.Filmy; local class incompatible: stream classdesc serialVersionUID = -9206225985694600879, local class serialVersionUID = -4654643547799675711
	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:604)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
	at wypożyczalnia.flimów.Filmy.listFilesForFolder(Filmy.java:109)
	at wypożyczalnia.flimów.WypożyczalniaFlimów.main(WypożyczalniaFlimów.java:56)
Java Result: 1

Proszę o pomoc i z góry dzięki :)

0

Wygląda to tak jakbyś zapisał te obiekty w pliku a potem zmodyfikował swoją klasę. Ewentualnie zapisywałeś obiekty klasy "identycznej" ale de facto skopiowanej do innego projektu.

0

Racja, przecież modyfikowałem metodę zapisu podczas gdy zostały jeszcze pliki zapisane ze starej. Stworzyłem nowe obiekty, jednak teraz program myśli przez chwile i nic nie wypisuje do konsoli jakby nigdy nic. Jakieś pomysły?

0

A co miałby wypisać? o_O

0

Wszystko to, co jest zapisane w pliku, czyli jego atrybuty:

public void odczyt()
{
System.out.format("tytuł: %s, gatunek: %s bohaterowie: %s, czas trwania: %s\n", tytuł, gatunek, bohaterowie, duration);
}

0

To zapnij się tam debugerem i zobacz co ci wczytało z pliku.

0

Jeżeli używasz JDK 7 to polecam zapoznać się z metodą Files.walkFileTree(Path start, FileVisitor<? super Path> visitor).
Link: http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

0

Ok coś poprawiłem i teraz wypisuje mi ciągle ten sam obiekt dodany jako ostatni do bazy dokładnie tyle razy, ile jest obiektów w folderze ale jestem już blisko rozwiązania problemu i pewnie to kwestia szczegółu którego niestety nie mogę znaleźć w tej metodzie:

public static void listFilesForFolder(final File folder)throws IOException,ClassNotFoundException 
    {
        for (final File fileEntry : folder.listFiles()) 
        {
                try{
                    nazwaPL = fileEntry.getName();
                    FileInputStream fin = new FileInputStream("E:/JAVA/Wypożyczalnia flimów/Filmy/"+nazwaPL);
                    ObjectInputStream pl2 = new ObjectInputStream(fin);
                    int l=1;
                    Filmy film = (Filmy)pl2.readObject();
                    System.out.println("\nFilm " + l++);
                    film.odczyt();
                    pl2.close();
                   } 
                catch (EOFException ex) 
                    {
                        System.out.println("Koniec pliku");
                    }
            
        }
    }

Na przykład dodałem dwa filmy do bazy i oto co mi wyrzuca:

Film 1
tytuł: null, gatunek: null, bohaterowie: [], czas trwania: null

Film 2
tytuł: null, gatunek: null, bohaterowie: [], czas trwania: null

Jest też druga możliwość, że źle zapisuję te pliki:

public static void dodaj() throws IOException{
            System.out.println("Podaj tytuł filmu: ");
                tytuł = input.nextLine();
                nazwaPL=tytuł;
                System.out.println("Podaj gatunek filmu: ");
                gatunek = input.nextLine();
                System.out.println("Podaj długość: ");
                duration = input.nextLine();
                System.out.println ("Podaj bohaterów występujących w filmie (aby przerwać, wciśnij 'n'): ");
                bohater = input.nextLine();
                do
                {
                    if (!bohater.equals("n"))
                    {
                        Filmy.addActors(bohater);
                    }
                    System.out.println("Aktor został dodany pomyślnie.");
                    bohater = input.nextLine();
                }
                while(!bohater.equals("n"));
                Filmy film = new Filmy(gatunek , 5.0f, duration, Filmy.bohaterowie);
                try{
                    FileOutputStream fout = new FileOutputStream("E:/JAVA/Wypożyczalnia flimów/Filmy/"+nazwaPL);
                    ObjectOutputStream pl = new ObjectOutputStream(fout);
                    pl.writeObject(film);
                    pl.close();
                    nazwaPL = null;
                    }
                catch(Exception ex)
                {
		   ex.printStackTrace();
                }
        }
0

Ok problem rozwiązany, dzięki za wszelką pomoc. ;)

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