Hallå!
Jag skulle vilja veta om det går att lagra en tvådimensionell array i en fil på något sätt?
Förutom att loopa igenom den och skriva ut varje post för sig till filen...
Går det? :q
------------------
---
/* LilleSkutt */
11 svar · 416 visningar · startad av LilleSkutt
Hallå!
Jag skulle vilja veta om det går att lagra en tvådimensionell array i en fil på något sätt?
Förutom att loopa igenom den och skriva ut varje post för sig till filen...
Går det? :q
------------------
---
/* LilleSkutt */
Javisst, alla object som uppfyller java.io.Serializable kan enkelt skrivas till en fil med en java.io.ObjectOutputStream.
PS Detta är en RTFM fråga.
------------------
Anders Lindbäck,Igiro Internet Giro
[Redigerat av Vetgirig den 12 sep 2001]
Ok, RTFM? :q
Hur skulle koden kunna se ut?
Något som denna:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
ObjectOutputStream oos = new ObjectOutputStream(new File("filen"));
oos.write(min2DArray);
------------------
---
/* LilleSkutt */
RTFM - Read The Fucking Manual
Det finns bra exempel i klass-dokumentationen
för en av de ovan nämda klasserna - du får
dock söka reda på vilken själv.
http://www.tuxedo.org/~esr/faqs/smart-questions.html
------------------
Anders Lindbäck,Igiro Internet Giro
Tänka sig, jag fick faktiskt idén att kolla upp hur man använde ObjectOutputStream i manualen, direkt efter att du sade vad jag skulle använda :e
Nu har jag lite problem bara... Hur får jag till det när jag ska läsa in datan igen? Man kan väl inte casta till en två dimensionell array?
Står ju inget i manualen om det...
------------------
---
/* LilleSkutt */
Du kan aldrig serialisera en vanlig array. Den måste kapslas in i något serielizerbart objekt.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html#61637
Det är bara att serialisera på!
------------------
God, root, what is difference? /Pitr
Ja jävlar. Det har du rätt i. Så smidigt. Jag tror jag måste uppdatera lite av mina 1.1.8-kunskaper.
Vad mycket lättare världen skulle bli om vi fick en JVM som stödjer Java2 i vårt projekt...
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
Jag har nu kommit på att funktionen readObject(); funkar att läsa in min lagrade tvådimensionella array med. Ett problem dock... Jag kan inte ändra värdena i den! Plus att jag inte vet om funktionen läser allt i filen. För tillfället är arrayen så liten att den lagras på endast en rad i filen, och då går det fint. Men om man ska läsa flera filer, går det med readObject()? Eller är den som readLine(), att den bara läser en rad i taget?
Man kan ju inte loopa igenom filen och lägga in varje rad i ett objekt...
Så här har jag gjort:
public String reader(String filen) {
Object input = null;
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filen));
input = ois.readObject();
}
catch(ClassNotFoundException e) {
System.err.println("Ett fel uppstod.\n\n" + e.getMessage());
System.exit(1);
}
catch(FileNotFoundException e) {
System.err.println("Filen som angavs finns inte.\n\n" + e.getMessage());
System.exit(1);
}
catch(IOException e) {
System.err.println("Ett fel uppstod.\n\n" + e.getMessage());
System.exit(1);
}
this.fields = (String[][])input;
}
Jag läser alltså bara första raden (?) i filen, och man kan ju inte göra så här:
public String reader(String filen) {
Object input = null;
Object ln = null;
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filen));
while((ln = ois.readObject()) != null) {
input += ln;
}
}
catch(ClassNotFoundException e) {
System.err.println("Ett fel uppstod.\n\n" + e.getMessage());
System.exit(1);
}
catch(FileNotFoundException e) {
System.err.println("Filen som angavs finns inte.\n\n" + e.getMessage());
System.exit(1);
}
catch(IOException e) {
System.err.println("Ett fel uppstod.\n\n" + e.getMessage());
System.exit(1);
}
this.fields = (String[][])input;
}
Man kan ju inte lägga till objekt till ett objekt med +=, enligt kompilatorn :l
------------------
---
/* LilleSkutt */
[Redigerat av LilleSkutt den 14 sep 2001]
Du kommer att läsa in HELA objektet med ett readObject() anrop, dvs du får med hela 2dArrayen även när den blir mycket större.
Ändringar i din array gör du precis som vanligt när du har läst in den, typ:
this.fields[0][1] = "en ändring";
Sen skriver du bara tillbaka arrayen och allt är frid och fröjd.
[Redigerat av phonkworks den 17 sep 2001]
Det finns ingen begränsning på hur lång en "rad" är i en fil...
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk