webForumDet fria alternativet

Lagring av data

11 svar · 416 visningar · startad av LilleSkutt

LilleSkuttMedlem sedan feb. 2001264 inlägg
#1

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 */

VetgirigMedlem sedan nov. 2000203 inlägg
#2

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]

LilleSkuttMedlem sedan feb. 2001264 inlägg
#3

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 */

VetgirigMedlem sedan nov. 2000203 inlägg
#4

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

GunnarDMedlem sedan juni 20014 250 inlägg
#5

Fel.

RTFM = Read The Fine Manual :e

------------------
If you can't convince them, confuse them.

LilleSkuttMedlem sedan feb. 2001264 inlägg
#6

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 */

LimeMedlem sedan sep. 2001837 inlägg
#7

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

spangoMedlem sedan juni 20006 147 inlägg
#8

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

LimeMedlem sedan sep. 2001837 inlägg
#9

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

LilleSkuttMedlem sedan feb. 2001264 inlägg
#10

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]

phonkworksMedlem sedan juli 2001228 inlägg
#11

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]

LimeMedlem sedan sep. 2001837 inlägg
#12

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

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb