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.
11 svar · 439 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?
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.
Ok, RTFM?
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);
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
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
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...
Du kan aldrig serialisera en vanlig array. Den måste kapslas in i något serielizerbart objekt.
/Lime
http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html#61637
Det är bara att serialisera på!
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
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
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]