object in einem file speichern

Status
Nicht offen für weitere Antworten.

miguelgalaxy

Mitglied
hallo zusammen
ich habe vor kurzer zeit schon einmal diese frage gestellt, aber es hat damals niemand geantwortet.
ich habe nun einen lösungsansatz, komme aber nicht weiter.

ich habe eine methode geschrieben, welcher man ein beliebiges objekt übergeben kann.
z.b ein object der klasse TestClassA.

Code:
class TestClassA{ 
    int err; 
    int id; 
    TestClassB b; 
} 

class TestClassB{ 
    int mode; 
    TestClassC[]  c; 
} 

class TestClassC{ 
    int[] iArr; 
    int[] i2Arr; 
}


dieses objekt sollte dann folgendermassen in ein file gespeichert werden:

Code:
err = 1; 
id = 2; 
b.mode = 2; 

b.c[0].iArr[0] = 13; 
b.c[0].iArr[1] = 2; 
b.c[0].iArr[2] = 534; 
b.c[0].i2Arr[0] = 21; 
b.c[0].i2Arr[1] = 23; 
b.c[0].i2Arr[2] = 1; 

b.c[1].iArr[0] = 3425; 
b.c[1].iArr[1] = 64; 
b.c[1].iArr[2] = 23; 
b.c[1].i2Arr[0] =34; 
b.c[1].i2Arr[1] = 6; 
b.c[1].i2Arr[2] = 23;

ich dachte mir, jedesmal wenn ein object kommt, oder ein array von objecten dann rufe ich die methode saveObject wieder mit diesem object auf:

Code:
public void saveObject(PrintWriter out, Class c) {

    this.out = out;
    this.publicFields = c.getFields();


    for (int i = 0; i < publicFields.length; i++) {
      
      Class cl = publicFields[i].getType();
      
      if(publicFields[i].getType().getFields().length > 0){
        //Object
        this.saveObject(out,publicFields[i].getType());
      }
      else if(cl.isArray()){
        //array
        int length = 0;
        String type = "";
        
        length = cl.getName().length();
        type = cl.getName().substring(cl.getName().length()-1,cl.getName().length());
        
        if(type.equals("L")){
          //array von objecten
          this.saveObject(out,publicFields[i].getType());
        }
        else{
          //array von basistypen
          //... ausgabe des arrays    
          }
          
     
        }
       else if(...ist es ein basistyp?){
           // ausgabe des basistyps
        }
      }      
  }


im moment weiss ich nicht weiter wie ich am besten das array ausgebe und wie ich erkennen kann, ob es ein basistyp ist?

kann mir da jemand weiterhelfen?

ach ja, ich mache das ganze so, damit ich die werte eines objectes im file bearbeiten kann.
sonst könnte ich es ja auch mit serialisieren machen!

liebe grüsse
miguelgalaxy
 
B

bygones

Gast
soll es eine generische Lösung für alle möglichen Objektstrukturen sein oder für die bestimmte ?
 

miguelgalaxy

Mitglied
am besten für alle möglichen objektstrukturen.
also da kommen basistypen vor, typen, arrays von typen, arrays von basistypen

liebe grüsse
miguelgalaxy
 

MPW

Top Contributor
öhm, schonmal was von Serilizable gehört?

Das ist genau das und du bräuchtest es nicht selber machen....
 

miguelgalaxy

Mitglied
jop,das kenne ich.
aber eben, wie oben beschrieben, ich muss die möglichkeit haben, das abgespeicherte object zu bearbeiten, sprich die werte im file anpassen.
wenn man ein object serialisiert hat man ja kaum den durchblick im erstellten file...

liebe grüsse
miguelgalaxy
 

André Uhres

Top Contributor
> wenn man ein object serialisiert hat man ja kaum den durchblick im erstellten file...

Stimmt. Und nicht nur das.
Der Versuch eine "serialized"-Datei zu ändern wird bald mit "StreamCorruptedException" bestraft.
Vielleicht müsste man in Richtung "Hibernate" weiter suchen.
 

MPW

Top Contributor
Andre_Uhres hat gesagt.:
> wenn man ein object serialisiert hat man ja kaum den durchblick im erstellten file...

Stimmt. Und nicht nur das.
Der Versuch eine "serialized"-Datei zu ändern wird bald mit "StreamCorruptedException" bestraft.
Vielleicht müsste man in Richtung "Hibernate" weiter suchen.

Achso, ich wusste nicht, dass du im File auch noch "den Durchblick" haben willst...
 

André Uhres

Top Contributor
> Achso, ich wusste nicht, dass du im File auch noch "den Durchblick" haben willst...

Was heisst hier "du"... ich hab damit ursprünglich nichts zu tun!

Aber egal, hier gehts weiter:
...oder in Richtung "Bean" mit "properties"-Datei oder Ähnliches.
 

André Uhres

Top Contributor
Hier ein kleines Beispiel von einer Bean mit Properties-Datei:
Die Klasse "TimerTest" testet die Bean "MeineUhr" mit zwei dauerhaft gespeicherten Eigenschaften
("Color" und "Font"), welche in der Datei "MeineUhr.properties" zu finden sind,
und dort beliebig angepasst werden können.
Code:
/*
 * TimerTest.java
 */
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
import javax.swing.border.*;
public class TimerTest extends JFrame {
    public TimerTest() {
        super("Timer Test");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.CENTER);
        
        uhr = new MeineUhr();
        panel.add(uhr);
        
        uhr.saveProperties();
    }
    public static void main(String args[]) { new TimerTest().setVisible(true); }
    private MeineUhr uhr;
}
class MeineUhr extends JPanel{
    private JLabel uhrLabel;
    private String uhrzeit;
    private String format= "hh:mm";
    private int sleepTime=500;
    private Thread um;
    //dauerhaft gespeicherte Eigenschaften:
    private Color color;
    private Font font;

    public MeineUhr(){
        try{
            properties.load(new FileInputStream(PROPERTIES_FILE));
        }catch(FileNotFoundException ex){
            System.out.println(ex.getMessage());
        }catch(IOException ex){
            System.out.println(ex.getMessage());
        }
        //setColor:
        String[] colors = (properties.getProperty("Color","0, 0, 0")).split(",");
        setColor(new Color(Integer.parseInt(colors[0].trim()),
                Integer.parseInt(colors[1].trim()),
                Integer.parseInt(colors[2].trim())));
        //setFont:
        String[] fonts = (properties.getProperty("Font","Microsoft Sans Serif, 1, 11")).split(",");
        setFont(new Font(fonts[0].trim(),
                Integer.parseInt(fonts[1].trim()),
                Integer.parseInt(fonts[2].trim())));
        //andere, nicht gespeicherte Eigenschaften:
        this.setMaximumSize( new Dimension(58, 26) );
        this.setBackground(new Color(204, 204, 255));
        this.setBorder(new BevelBorder(BevelBorder.RAISED));
        this.setToolTipText("Clock");
        this.setFocusable(false);
        
        this.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                setFormat("hh:mm:ss");
            }
            public void mouseReleased(MouseEvent evt) {
                (new Thread(){public void run(){try{sleep(10000);}catch(Throwable ex){}
                setFormat("hh:mm");}}).start();
            }
        });
        
        this.add(getUhrLabel());
        um = new Thread(){
            public void run(){
                while(true){
                    uhrLabel.setText(getUhrzeit());
                    try{sleep(sleepTime);}catch(Throwable ex){}
                }
            }
        };
        um.start();
    }
    private JLabel getUhrLabel(){
        if(null==uhrLabel){
            uhrLabel=new JLabel();
        }
        return uhrLabel;
    }
    public String getUhrzeit(){
        Date date = new GregorianCalendar().getTime();
        return (new SimpleDateFormat(format)).format(date);
    }
    public String getFormat(){
        return format;
    }
    public void setFormat(String format){
        this.format=format;
        if(format.length()<8){
            sleepTime=10000;
        }else{
            um.interrupt();
            sleepTime=500;
        }
    }
    public Font getFont(){
        return getUhrLabel().getFont();
    }
    public void setFont(Font font){
        this.font = font;
        getUhrLabel().setFont(font);
    }
    public Color getColor(){
        return getUhrLabel().getForeground();
    }
    public void setColor(Color color){
        this.color = color;
        getUhrLabel().setForeground(color);
    }
    
    public void saveProperties() {
        properties.setProperty("Color",""+color.getRed()+", "+color.getGreen()+", "+color.getBlue());
        properties.setProperty("Font",""+font.getName()+", "+font.getStyle()+", "+font.getSize());
        try{
            properties.store(new FileOutputStream(PROPERTIES_FILE),"");
        }catch(FileNotFoundException ex){
            System.out.println(ex.getMessage());
        }catch(IOException ex){
            System.out.println(ex.getMessage());
        }
    }
    private final String PROPERTIES_FILE = "MeineUhr.properties";
    private Properties properties = new Properties();
}
 

miguelgalaxy

Mitglied
ich habe nun einen lösungsansatz:

Code:
 public void saveObject(PrintWriter out, Object o) {

     for (int i = 0; i < o.getClass().getFields().length; i++) {

       Class cl = o.getClass().getFields()[i].getType();

       if(o.getClass().getFields()[i].getType().getFields().length > 0){
         path += o.getClass().getFields()[i].getName()+".";
        try {
          this.saveObject(out, o.getClass().getFields()[i].get(o));
        }
        catch (SecurityException ex) {
        }
        catch (IllegalAccessException ex) {
        }
        catch (IllegalArgumentException ex) {
        }

       }
       else if(o.getClass().getFields()[i].getType().isArray()){

         int arrlength = 0;
         String arrtype = "";

         arrlength = o.getClass().getFields()[i].getName().length();
         arrtype = cl.getName().substring( cl.getName().length()-1, cl.getName().length());

         if(arrtype.equals("L")){
           path += o.getClass().getFields()[i].getName()+".";
         try{
           this.saveObject(out,o.getClass().getFields()[i].get(o));
         }
         catch (SecurityException ex) {
         }
         catch (IllegalAccessException ex) {
         }
         catch (IllegalArgumentException ex) {
         }


         }
         else{          
           
           for(int q = 0; q < arrlength; q++){
             
             out.println("o " + o.getClass().getFields()[i].getName());
             out.println("o " + o.getClass().getFields()[i].getType().getName());
             
             try{
               if (arrtype.equals("Z")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " +
                             o.getClass().getFields()[i].getBoolean(o));
               }
               else if (arrtype.equals("B")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getByte(o));
               }
               else if (arrtype.equals("C")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getChar(o));
               }
               else if (arrtype.equals("D")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " +
                             o.getClass().getFields()[i].getDouble(o));
               }
               else if (arrtype.equals("F")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getFloat(o));
               }
               else if (arrtype.equals("I")) {
               out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getInt(o));
               }
               else if (arrtype.equals("J")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getLong(o));
               }
               else if (arrtype.equals("S")) {
                 out.println(path + o.getClass().getFields()[i].getName() + "[" +
                             q + "] = " + o.getClass().getFields()[i].getShort(o));
               }
             }

              catch (IllegalAccessException ex1) {
                System.out.println("a");
              }
              catch (IllegalArgumentException ex1) {
                System.out.println("b");
              }
              catch (SecurityException ex1) {
                System.out.println("c");
              }
           }
           out.println("");
         }
       }
       else{
         out.println(path + o.getClass().getFields()[i].getName() + " = value");
       }
     }
   }

irgendwie happert es aber noch bei der ausgabe der werte.

ich versuchte es folgendermassen:

out.println(path + o.getClass().getFields().getName() + "[" +
q + "] = " + o.getClass().getFields().getInt(o));

aber ist das programm an dieser stelle angelangt, wird immer eine IllegalArgumentException aufgerufen, sprich es wird auf der konsole ein b ausgeben.

ich vestehe nicht wesshalb das nicht funktioniert.
ich habe das ganze auch schon im jbuilder debugged und das objekt o ist ok und ich sehe die arrayelemente mit den werten.

weiss jemand was hier nicht korrekt ist?
liebe grüsse
miguelgalaxy
 

Mag1c

Top Contributor
Moin,

wenn du per Reflection Werte aus einem Array holen willst, mußt du die Methoden aus java.lang.reflect.Array benutzen z.B. Array#getInt(Object array, int index)

Gruß
Mag1c
 

Elephant

Aktives Mitglied
Hallo, also ich hab mir jetzt nicht alles so durchgelesen und weiß nicht ob die Antwort passt und ob sie überhaupt noch gebraucht wird, aber ich habe letztens XStream gefunden, darüber können Objekte in XML-Dateien gespeichert werden, und die kann man relativ gut bearbeiten.
 
B

bygones

Gast
Elephant hat gesagt.:
Hallo, also ich hab mir jetzt nicht alles so durchgelesen und weiß nicht ob die Antwort passt und ob sie überhaupt noch gebraucht wird, aber ich habe letztens XStream gefunden, darüber können Objekte in XML-Dateien gespeichert werden, und die kann man relativ gut bearbeiten.
XStream kenn ich nicht, aber im Grunde bietet Java selbst ja auch XML serialisierung an (aber auch keine ahnung wie gut bzw. handlebar das ist)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
D Object in int casten Allgemeine Java-Themen 7
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10
D Object to Long casting Allgemeine Java-Themen 9
G Object mit static Feldern speichern Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben