LinkedList speichern

ZAntjeZ

Mitglied
Hallo,

ich moechte eine LinkedList so speichern, dass ich sie wieder einlesen kann und auch die Struktur (also die Liste mit ihren Elementen) wieder bekomme. Wie kann ich dass machen?

Danke fuer jeden Tip!
 
Hallo,
das Stichwort ist Serial bzw Deserialisierung:

Schau mal hier:

Code:
import java.util.LinkedList;
import java.io.IOException; 
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;

class LinkListSerializer{

        public static void serializeListToFile(LinkedList<Integer> list, String file){

                try{
                        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file));
                        os.writeObject(list);
                        os.close();
                }
                catch(IOException e){ 
                        System.out.println("IOException occured :(");
                        e.printStackTrace();
                }
        }

        public static LinkedList<Integer> deserializeListFromFile(String file){
                
                LinkedList<Integer> ret = null;
                try{ 
                        ObjectInputStream is = new ObjectInputStream(new FileInputStream(file));
                        ret = (LinkedList<Integer>)(is.readObject());
                        is.close();
                }
                catch(Exception e){
                        System.out.println("IOException occured :(");
                        e.printStackTrace();    
                }
                return ret;
                
        }
                
        public static void main(String[] args){ 

                String file = "linkedlist.obj";
                LinkedList<Integer> out_list = new LinkedList<Integer>();
                out_list.add(3);
                out_list.add(5);
                out_list.add(1);
                serializeListToFile(out_list, file);
                LinkedList<Integer> in_list = deserializeListFromFile(file);
                
                while(!in_list.isEmpty()){

                        System.out.print(in_list.poll() + "-> ");
                }
                System.out.println("null");
                
        }
}

Wenn du ein eignes Objekt erstellen möchtest was du de- bzw serialisieren möchtest muss es
das Interface Serializable implementieren...

Gruß

RedWing
 
Hallo!

Du könntest auch den XMLEncoder/XMLDecoder versuchen:

Code:
/*
 * Created on 10.01.2005@12:18:22
 *
 * TODO Explain me...
 */
package de.tutorials;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Darimont
 *
 * TODO Comment me
 */
public class XMLSerializerTest {

    public static void main(String[] args) {
        new XMLSerializerTest().doIt();
    }

    /**
     * 
     */
    private void doIt() {
        List list = new LinkedList();
        list.add("AAA");
        list.add("BBB");
        list.add(new Foo());

        try {
            File file = new File("c:/myLinkedList.xml");
            XMLEncoder encoder = new XMLEncoder(new FileOutputStream(file));
            encoder.writeObject(list);
            encoder.flush();
            encoder.close();

            XMLDecoder decoder = new XMLDecoder(new FileInputStream(file));
            List lst = (List) decoder.readObject();
            System.out.println(lst);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Foo:
Code:
/*
 * Created on 10.01.2005@12:24:28
 *
 * TODO Explain me...
 */
package de.tutorials;

public class Foo {
    int a = 10;

    int b = 5;

    public Foo() {

    }

    public String toString() {
        // TODO Auto-generated method stub
        return a + ":" + 5;
    }
}

myLinkedList.xml
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.5.0" class="java.beans.XMLDecoder"> 
 <object class="java.util.LinkedList"> 
  <void method="add"> 
   <string>AAA</string> 
  </void> 
  <void method="add"> 
   <string>BBB</string> 
  </void> 
  <void method="add"> 
   <object class="de.tutorials.Foo"/> 
  </void> 
 </object> 
</java>

Gruß Tom
 
ZAntjeZ hat gesagt.:
Ist vielleicht ne bloede Frage: aber was haben die eckigen Klammern LinkedList< Integer > zu sagen?

Die spitzen Klammern drücken aus das es sich um einen generischen Datentyp handelt...
Seit java 1.5 eingeführt...

Siehe http://java.sun.com/developer/technicalArticles/J2SE/generics/

Damit bleibt dir nun endlich dieses (sorry) dumme gecaste auf den entsprechenden Typ, beim
Elementauslesen einer speziellen Collection erspart....
Wenn du eine J2SE <= 1.5 verwendest müsstest du das Beispiel halt auf die alte
Vorgehensweise anpassen.

Gruß

RedWing
 
Zurück