Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo liebe Community,

ich hab schon der ganzen Tag damit verbracht dieses Problem irgendwie zu lösen aber ich krieg es einfach nicht hin.

Ich hoffe ihr könnt mir helfen

Zu meinem Problem :

Ich möchte auf einem FTP Server Objekte einer von mir geschriebenen Klassen abspeichern . Das Speichern ist kein Problem allerdings das lesen vorallem wenn ich versuche eine gelesene Datei wieder zurück zu meiner Klasse zu casten.

Bisher habe ich immer Lokal so gecastet :



ObjectInputStream r = new ObjectInputStream(new BufferedInputStream(

new FileInputStream(uniDir[i])));


this.university[i] =(University) r.readObject();


Wobei University meine geschriebene Klasse ist . Dies lief wunderbar und jetzt wollte ich eine auf meinem FTP Server liegende Datei wieder zu meiner Klasse casten. Doch das klappt einfach nicht . Ich habs mal so versucht :

Object o = new Object() ;

ByteArrayOutputStream bout = new ByteArrayOutputStream ();

ftp.retrieveFile( path, bout) // path ist der Pfad wo die Datei liegt

ObjectOutputStream t = new ObjectOutputStream(bout)

t.writeObject(o);


Student s = (Student) o ;

Es taucht zwar keine Exception auf, allerdings haben die Variablen meines Student s alle eine zuweisung auf null, wo doch mein Ziel war diesen Studenten von der Online Datei wiederherzustellen.

Ich bedanke mich für eure Zeit

Volrath

Nach oben

Es taucht zwar keine Exception auf, allerdings haben die Variablen meines Student s alle eine zuweisung auf null, wo doch mein Ziel war diesen Studenten von der Online Datei wiederherzustellen.

Verstehe ich das richtig, dass Du die Klasse auf Deinem Server ablegst. Das ist wenn die Klasse, also sprich der Bauplan Deines Objektes, das Objekt, sprich die konkreten Daten sind nicht in der Klasse, sondern nur im Speicher. Sprich Du musst in diesem Fall Klasse und die Daten auf Deinem Server speichern. Sprich entweder serialisierst Du Dein Objekt und speicherst diese serialisierten Daten mit Deiner Klasse zusammen auf dem FTP und lädst dann entsprechend, oder was eleganter ist, Du würdest so etwas über RMI lösen

Phil

ja genau also ich möchte z.b. einmal einen Studenten erstellen mit name , alter etc... und dieses Object z.b. Student Volrath mit all seinen zugewiesenen Variablen online in einer Datei packen und ihn dann später wieder laden können .

Meine Klassen sind alle serializable das Probleme liegt irgendwie bei dem Hin und Her casten dass es nicht funktioniert

Ich hoffe du weisst ne Lösung weil ich jetzt schon echt lange an diesem Probleme sitzte und langsam verzweifle ;)

Also ich speichere ja nicht direkt die .class ab sondern ein Objekt von Student z.b. sieht der Code zum lokalen speichern des Objekten Student so aus


private void writeStudent(Student student)

	{

		try

	    {

		  File file2  = new File("C:/StudyApplication/"+this.name+"/Student");

		  if(!file2.exists()){

			  file2.mkdirs();}

	      FileOutputStream file = new FileOutputStream("C:/StudyApplication/"+this.name

	    		  +"/Student/"+student.firstName+student.secondName+".jso" );

	      ObjectOutputStream o = new ObjectOutputStream( file );

	      o.writeObject  ( student );

	      o.close();


	    }catch ( IOException e ) { System.err.println( e ); }


	}

und das laden wäre dann


ObjectInputStream r = new ObjectInputStream(new BufferedInputStream(

							new FileInputStream("PfadDerDatei desStudentenDassGeladenWerdenSoll");

		Student s =(Student) r.readObject();


Lokal hat das so funktioniert , das problem ist hier dass ich das über ftp machen möchte also alles online das speichern laden etc...

Das Problem liegt daran dass ich mit den ftp Methoden

1 ftp.retrieveFile(String arg0, OutputStream arg1)

2 ftp.retrieveFileStream(String remote)

1. Einen OutputStream kriege und mit 2 einen InputStream bekomme wobei ich dann diese irgendwie wieder zun einem ObjectInputStream casten muss damit ich sie dann mit r.readObject(); (wie lokal) wieder zu meinem Studenten caste

oder vllt kannst du mir einfach erklären wie ich über apache ftp (oder ein anderes ftpClient ) ein objekt einer von mir erzeugten Klasse abspeichere und später wieder laden kann dass wenn ich z.b. sage sage

Student Volrath hat die und die Eigenschaften ich wieder diesen Studenten laden kann

Kannst du mal bitte die Klasse "Student" posten, mich interessiert das "Serialisieren".

Ich würde ggf zunächst einmal es lokal versuchen, wenn das dann funktioniert, das ganze via Netz. Im Grunde musst Du ja nur die serialisierten Daten speichern, denn die Klassen liegen ja bei Dir lokal zum instanzieren.

Phil


import java.io.InputStream; 

public class Student implements java.io.Serializable {


	public String firstName,secondName,password,mail,nick;

	public double averageGrade[] ;

	public double averageGradeWithLN[];

	public double Credits ;

	public int actSem ;

	public ExamP examP[] = new ExamP[0];

	public ExamLN examLN[] = new ExamLN[0];


	public Student(String firstName, String secondName,String nick,String password,String mail, int actSem, int allSem)

	{

		this.firstName = firstName;this.secondName = secondName;

		this.actSem = actSem;this.averageGrade= new double[allSem];this.averageGradeWithLN = new double[allSem];

		this.password = password ;

		this.mail = mail;

		this.nick = nick ;

	}


	public void setFirstName(String firstName) {

		this.firstName = firstName;

	}


	public void setSecondName(String secondName) {

		this.secondName = secondName;

	}


	public void setPassword(String password) {

		this.password = password;

	}


	public void setMail(String mail) {

		this.mail = mail;

	}


	public void setActSem(int actSem) {

		this.actSem = actSem;

	}

	public void addExamP(ExamP examP)

	{

		boolean isExam = false;

		for(int i=0;i<this.examP.length;i++)

		{

			if(this.examP[i].lecture.equals(examP.lecture)){isExam=true;};

		}

		if(!isExam)

		{

			ExamP[] tmp = new ExamP[this.examP.length];

			for(int i=0;i<this.examP.length;i++){tmp[i] = new ExamP(); tmp[i] = this.examP[i];}

			this.examP = new ExamP[tmp.length+1];

			for(int i=0;i<tmp.length;i++){this.examP[i] = tmp[i];}

			this.examP[this.examP.length-1] = examP;

			setAverageGrade();

		}

	}

	public void addExamLN(ExamLN examLN)

	{

		boolean isExam = false;

		for(int i=0;i<this.examLN.length;i++)

		{

			if(this.examLN[i].lecture.equals(examLN.lecture)){isExam=true;};

		}

		if(!isExam)

		{

			ExamLN[] tmp = new ExamLN[this.examLN.length];

			for(int i= 0; i<this.examLN.length;i++){tmp[i] = new ExamLN(); tmp[i] = this.examLN[i];}

			this.examLN = new ExamLN[tmp.length+1];

			for(int i= 0; i<tmp.length;i++){this.examLN[i] = tmp[i];}

			this.examLN[this.examLN.length-1] = examLN;

		}

	}

	public String printExam()

	{

		String text = "";

		for(int i= 0; i < this.examP.length;i++)

		{

			text += this.examP[i].toString();

		}

		for(int i= 0; i < this.examLN.length;i++)

		{

			text += this.examLN[i].toString();

		}

		return text ;

	}

	public String printExamP()

	{

		String text = "";

		for(int i= 0; i < this.examP.length;i++)

		{

			text += this.examP[i].toString();

		}


		return text ;

	}

	public String printExamLN()

	{

		String text = "";

		for(int i= 0; i < this.examLN.length;i++)

		{

			text += this.examLN[i].toString();

		}

		return text ;

	}

	private void setAverageGrade()

	{

		double credits=0, averageGrade=0 ;

		for(int i=0;i<this.averageGrade.length;i++)

		{

			for(int j=0;j<this.examP.length;j++)

			{

				if(this.examP[j].sem == i && this.examP[j].passed || i==0 && this.examP[j].passed)

				{

					averageGrade += this.examP[j].grade*this.examP[j].credits;

					credits += this.examP[j].credits;

				}

			}

			this.averageGrade[i] = averageGrade/credits;

			averageGrade = 0;

			credits = 0;

		}

	}

	private void setAverageGradeWithLN()

	{


	}

}


wobei die Klasse Student auch Variablen der Klasse Exam hat aber das spielt ja eigentlich erstmal keine Rolle . Kannst ja alles was mit Exam zutun hat zunächst löschen und versuchen einen Studenten anzulegen und dann wieder zu laden

Mit dem Lokal instanziieren könnte ich später probleme kriegen weil ich das ganze als applet haben möchte und soweit ich weiß applets nicht auf die festplatte zugreifen dürfen

ich hab dich in icq geadded ....

Kein Prob mit ICQ, hab ich bestätigt, war aber nicht online.

Ich meine mich dunkel daran erinnern zu können, dass Du, wenn Du weitere eigene Klassen verwendest, selbst dafür Sorge tragen musst, dass diese serialisiert werden (bei Dir Exam), denn nur einfache Datentypen werden automatisch serialisiert.

Hilfreich fand ich diese Seite: Serialisieren von Objekten

Wenn ich es schaffe, schaue ich morgen mir das noch einmal in Ruhe an.

LG Phil

yaa es funtzt

hab meinen FTP Client geändert habs mal mit com.enterprisedt.net.ftp.FileTransferClient; gemacht und es klappt

Für alle die es intressiert

Code:

System.out.println(ftp.getRemoteDirectory());

System.out.println("Excist: "+ftp.exists(path));

InputStream r = ftp.downloadStream(path); o = new ObjectInputStream®; Student s = (Student ) o.readObject();

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.