28. oktober 2010 - 12:00Der er
5 kommentarer og 2 løsninger
Læse en fil med LinkedList i
Jeg forsøger at gemme en LinkedList i en fil. Så vil jeg gerne læse filen, og benytte den læste LinkedList. Men ved læsningen kommer der fejl.
Dette er hvad, jeg gør:
data som skal gemmes: String[] data = new String[6]; data[0]="bla"; .... LinkedList list= new LinkedList(l3); list.add(data);
gemmes i fil: PrintWriter out = new PrintWriter (new BufferedWriter (new FileWriter (file))); out.print(list); out.flush(); out.close();
(når jeg åbner filen i NotePad, så står der 1 linie tekst i den, eftersom jeg kun har fyldt 1 plads i arrayet)
læses fra fil: BufferedReader in = new BufferedReader(new FileReader(file)); list=new LinkedList(l3); her har jeg så forsøgt et utal af forskellige implementeringer. F.eks.: list=in.readLine(); eller list.add(in.readLine());
Den sidst nye er: ObjectInputStream in2 = new ObjectInputStream(new FileInputStream(file)); LinkedList newFirst = (LinkedList)in2.readObject();
Men ingen af implementeringerne virker. Mange af forsøgende giver Exception: cannot convert to String from String[]. Men selvom jeg forsøger, at overholde dette krav, så virker det ikke. Den sidst nye implementering giver denne exception: IOException at load projekt: invalid stream header: 5B5B4C6A
Jeg har forsøgt at finde vejledning og eksempler online til konvertering af LilnkedList læst fra fil til LinkedList på runtime, men de virker som sagt ikke.
Er der nogle herinde, som kan hjælpe mig med dette problem?
Jeg tror du har misforstået hele idéen i LinkedList og så griber du opgaven lidt forkert an.
i den linie hvor du skriver "list.ad(data)" tilføjer du ét object, af type string[]. Når du så bruger printwriter.print(list) kalder du faktisk printerwriter.print(list.toString()) - som bare er en streng representation af listen.
Jeg vil foreslå at du tilføjer data direkte i din linkedlist. LinkedList<String> list = new LinkedList<String>(); list.add("data1"); list.add("data2"); list.add("data3"); list.add("data4"); ....
Og når ud så skal gemme dine informationer kan du gøre 2 ting. Den simple løsning er at løbe alle elementer i din liste igennem, og så gemme elementerne i hver sin linie. Når du så indlæser laver du en ny tom LinkedList og indlæser linie for linie ind i din LinkedList.
Anden mulighed er serialization, men det er noget mere teknisk. Men bestemt også smartere da den gemmer den fuldstændige status af objektet.
Jeg havde også selv tanken om, at den linie, der blev udskrevet, når jeg udskrev indholdet af linkedList, blot var string-repræsentationen af adressen til variablen.
Men på den anden side (og det er vel dette, som forvirrer mig), så kan jeg godt hente data ud af listen, og så vise de data. Men det er før, jeg gemmer listen som fil.
Af de 2 muligheder til løsning, du nævner, vil jeg foretrække nummer 2, eftersom min linkedList indeholder arrays af objekter. På trods af dette, kan man godt gemme hver linie for sig i en fil, men det kræver, at man holder tungen lige i munden. Derimod burde serialization gøre det en del lettere (og mere naturligt). Den tekniske side af det, kan jeg nok klare. Blot forståelsen for det går op for mig :-)
Siden ingen af jer ønsker at tage æren for løsningen, så uddeler jeg pointene ud fra arbejde med forsøg på at finde løsning. Altså deler i :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.