Volrath1987 Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 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 Zitieren
flashpixx Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 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 Zitieren
Volrath1987 Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 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 Zitieren
flashpixx Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 Also wenn Du die Klasse speicherst (*.class) dann reicht das natürlich nicht. Evtl mal bitte den Code posten. Ich würde da eher auf RMI setzen Phil Zitieren
Volrath1987 Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 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 Zitieren
Volrath1987 Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 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 Zitieren
flashpixx Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 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 Zitieren
Volrath1987 Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 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 Zitieren
Volrath1987 Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 ich hab dich in icq geadded .... Zitieren
flashpixx Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 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 Zitieren
Volrath1987 Geschrieben 8. Februar 2009 Autor Geschrieben 8. Februar 2009 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(); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.