Datensätze in eine ArrayList<Movie> speichern

smart85

Mitglied
Hallo Leute,

ich bitte euch um eine Rat. Ich habe eine .txt Datei und möchte diese zeilenweise in ein ArrayList<Movie>
speichern. wie kann ich es machen? Habe viele Ansätze im Internet gefunden, aber irgendwie will es nicht so klappen...hier ein Stück aus dem COde...welche Methode könnte man anstatt von dem readline anwenden, weil mit Strings funktioneirt die Methode readLine, aber wenn ich nicht <String>, sondern <Movie> habe, dann weiß ich ehrlich gesagt nicht wie ich es schreiben soll...

-------------------------------------------------------------------------
public ArrayList<Movie> findall() throws IOException {

ArrayList<Movie> movielist = new ArrayList<Movie>();
FileReader datei = new FileReader(filename);
BufferedReader br = new BufferedReader(datei);
String zeile = null;

Movie film = new Movie();
movielist.add(film);
for(int i=0; i < movielist.size(); i++)
System.out.println( movielist.get( i ) );

while ((film = datei.readLine()) != null)
movielist.add(film);


while ((zeile = br.readLine()) !=null){
System.out.println(zeile);
}
-------------------------------------------------------------------------

P.S.: public class Movie {
private String director;
private String title;



Vielen Dank im Voraus!
 
weil mit Strings funktioneirt die Methode readLine, aber wenn ich nicht <String>, sondern <Movie> habe, dann weiß ich ehrlich gesagt nicht wie ich es schreiben soll...

P.S.: public class Movie {
private String director;
private String title;

Aber deine Klasse Movie hat doch Strings. Zu diesen Strings (director und title) könnten evtl. auch setter-Methoden existieren, was wir aus dem Code aber leider nicht erahnen können. Und wie die txt-Datei jetzt aufgebaut ist, hmmm.... Stehen da director und title durch Komma getrennt in einer Zeile? Dann müsstest du die eingelesene Zeile bei dem Trennzeichen trennen und mit der setter-Methode (setDirector, setTitle) in das Movie-Objekt schreiben.
 
Du musst natürlich den String in einen [c]Movie[/c] konvertieren. Wenn du z.B. pro Linie [c]<title> <year>[/c] (mit " " dazwischen) hast, kannst du so was machen:
Java:
public class Movie {
    private String title;
    private int year;

    public Movie(String title, int year) {
        this.title = title;
        this.year = year;
    }
    
    // getter, setter, etc...
}

Java:
String line;
while ((line = datei.readLine()) != null) {
    String[] values = line.split(" +"); // nach einem oder mehreren Leerzeichen splitten
    movies.add(new Movie(values[0], Integer.valueOf(values[1])));
}
// ...
 
Die Movie Klasse ist:

public class Movie {

private String director;
private String title;

public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}

}

Die txt-Datei:

Star Wars:George Lucas
Pulp Fiction:Quentin Tarantino
From Dusk Till Dawn:Quentin Tarantino
Der Soldat James Ryan:Steven Spielberg
Trainspotting😀anny Boyle
Jurassic Park:Steven Spielberg
Independence Day:Roland Emmerich
Einer flog ueber das Kuckucksnest:Milos Forman
Das Schweigen der Lämmer:Jonathan Demme
Es geschah in einer Nacht:Frank Capra
Die Verurteilten:Frank Darabont
Minority Report:Steven Spielberg
 
Ja, dann splittest du einfach auf ":" statt " " 😉 Und entweder fügst du einen Konstruktor hinzu oder erstellst zuerst das Objekt und setzt danach die beiden Werte über die Setter.
 
Vielen Dank für eure Hilfe!!!!🙂🙂🙂

ich habe das jetzt so gemacht und auf der console erscheint der gefärbte Code nicht...verstehe jetzt aber nicht wieso...


public ArrayList<Movie> findall() throws IOException {

ArrayList<Movie> movielist = new ArrayList<Movie>();
FileReader datei = new FileReader(filename);
BufferedReader br = new BufferedReader(datei);
String zeile = null;

System.out.println("----------------------------");

while ((zeile = br.readLine()) !=null){
//try {zeile = br.readLine();}
//catch (IOException e){e.printStackTrace();}
System.out.println(zeile);
}
System.out.println("----------------------------");

while ((zeile = br.readLine()) != null) {
String[] values = zeile.split(":"); // nach einem oder mehreren Leerzeichen splitten
Movie m = new Movie();
m.getDirector();
m.getTitle();
movielist.add(new Movie());
}



>>>>>>>>>>>>>>>>>>>>>>>>>>>>

kann ich es auch so schreiben? Das war mein erster Ansatz..

while( zeile != null ){
String[] splittArray = zeile.split("\\:");
System.out.print(splittArray[0]+" : ");
System.out.print(splittArray[1]+"\n");
try {
zeile = br.readLine();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 
Hmm, so ganz verstanden hab ich jetzt nicht, was du damit meinst, was nun nicht auf der Konsole erscheint.

Aber mir ist was anderes aufgefallen:
Java:
Movie m = new Movie();
m.getDirector();
m.getTitle();
movielist.add(new Movie());

Das müsste dann wohl eher so heissen:
Java:
Movie m = new Movie();
m.setTitle(values[0]);
m.setDirector(values[1]);
movielist.add(m);
Weil du ja das erstellte Movie-Objekt füllen und der Liste hinzufügen willst und nicht ein neues (leeres) Objekt.

Und es wäre vielleicht ganz praktisch, wenn du deinen Java-Code hier in Java-Tags schreibst.
 
Zuletzt bearbeitet von einem Moderator:
Leute bitte hilf mir!!!

bei mir spuckt das Eclipse ein Fehler bei der findAll() -Methode aus, es sagt: the methode findAll is undefined for the type IMovieFinder....gegoogelt habe ich auch schon, finde aber nichts, hat jemand vielleicht eine Idee...Vielen Dank im Voraus!!!

Java:
import java.util.ArrayList;


public class MovieLister {
	
	private IMovieFinder movieFinder;
	
	public MovieLister(){}

//------------------------------------------------------------
   public Movie[] moviesDirectedBy(String director){
		
	    int anz=0, zaehler=0;
    	Movie[] filmliste;
		ArrayList<Movie> liste= new ArrayList<Movie>() ;
		movieFinder = new ColonDelimitedMovieFinder(); // Beziehung --> <<instantiate>>
		liste = movieFinder.findAll(); 
		anz=liste.size();
		filmliste = new Movie[anz];
		System.out.println(anz);
		System.out.println(filmliste[0]);
		return filmliste;
		
    }
//------------------------------------------------------------
 
bevor ich hier dummschwätze:

du hast selber ne methode geschrieben "findall()" richtig?

du ruftst ab findAll() auf mit großen A. und die gibts bei java auch. aber du willst deine eigene findall() aufrufen oder?

weiter hin fehlt in deinem post weiter oben ein rückgabewert bei "findall()"

also "return movielist" am ende
 
Muss es unbedingt eine Text-Datei sein? Mit JAXB gibt es Ein- und Auslesen fast zum Nulltarif, nur hast du dann halt XML auf der Platte.
 
könntet ihr auch folgendes euch anschauen, BITTE!

ich gebe da einen Regisseur ein und das Programm sollte die dazugehörigen Filme ausgeben...aber irgendwie klappt es nicht so ganz...ich kann den Fehler nicht finden...eigentlich sollte das Programm es machen...vielleicht habe ich einen Ligikfehler oder so...


hier die Main:

Java:
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;


public class Main {
    // private Movie movie;
     //private ArrayList<Movie> findall;

	public static void main(String[] args) throws IOException {
		
		String regisseur;
	    MovieLister mlist = new MovieLister();
		IMovieFinder c = new ColonDelimitedMovieFinder();
		
	    
	    int auswahl = -1 ;	    	
	    System.out.println("Wählen Sie aus:\n"+"1. >> Filmliste mit zugehörigen Regisseuren anschauen\n"+"2. >> Film aussuchen");
	    auswahl = new Scanner(System.in).nextInt();

	    	//Scanner scanner = new Scanner( new File("movie.txt") );
	    	switch(auswahl){
	    		case 1:c.findall();
	    		  
	    	     break;
	    	
	    		[COLOR="blue"][B]case 2: [/B][/COLOR]
	    			System.out.print("Bitte geben Sie den Regisseur ein: ");
	    		    InputStreamReader isr = new InputStreamReader(System.in);//Eine komplette Zeile von der Standardeingabe lesen
	    		    BufferedReader buffer= new BufferedReader(isr);
	    		    regisseur = buffer.readLine();//Texteingabe von Tastatur.
	    		    buffer.close();
	    		    System.out.println("Regisseur: " +regisseur);
	    		    [B][COLOR="blue"]Movie[] film = mlist.moviesDirectedBy(regisseur);[/COLOR][/B]
	    		    
	    	        //int laenge=film.length;
	    	        //String f = null;
	    	        
	    	        for (int i=0; i<film.length; i++){
		    	       System.out.println("Hallo");    	        
	    	           System.out.println(i+" "+film[i].getTitle());    	        	
	    	        }
	    	        
	    	      /*  for(int i=0;i<laenge;i++){
		    	          if(film[i]!=null){
		    	        	  Movie m = new Movie();
		    	        	  m = film[i];
		    	        	  
		    	        	  if(f==null) System.out.println(" "+m.getTitle()+"; ");
		    	        	  else f = f+ " " + m.getTitle() + ";";  
		    	          }
		    	    else if(i==0){
		    	       System.out.println("Filme dieses Regisseures nicht gefunden");	
	                	 f="Kein Film dieses Directors gelisted";

		    	    }	
	    	        
	    	        }*/
	    	            

	    		break;
	    	}	    
	}

}
 
die dazugehörige Methode moviesDirectedBy(String director) hier...



Java:
import java.util.ArrayList;


public class MovieLister {
	
	private IMovieFinder movieFinder = new ColonDelimitedMovieFinder();

        public Movie[] moviesDirectedBy(String director){

   	Movie[] filmliste;
   	ArrayList<Movie> allefilme = movieFinder.findall();
   	ArrayList<Movie> filme = new ArrayList<Movie>();
   	
   	for(int j = 0; j < allefilme.size(); j++){
   		if(allefilme.get(j).getDirector().equals(director)){
   			filme.add(allefilme.get(j));
   		}  				
   	}

filmliste = new Movie[filme.size()];
filme.toArray(filmliste);
return filmliste;


}
}
 

Zurück
Oben