# Array abspeichern



## Maddimini (22. April 2010)

Hallo 

Ich habe ein zweidimensionales Array mit int-Werten gefüllt. Wie kann ich dieses (am besten in einer *.txt) abspeichern und wieder auslesen.

Vielen Dank schon einmal


----------



## Kai008 (22. April 2010)

Ich weiß nicht, ob man ein Array serialisieren kann, aber wenn geht es am einfachsten mit einen ObjectOutputStream. Sonst mit einer oder mehrererer Schleifen und einen FileWriter.


----------



## Dunas (23. April 2010)

am besten in dieser form:

{[0,2,3][4,5,6]};{....


```
int test1[][]  = new int[2][3];
test1[0][0] = 0;
test1[0][1] = 2;
test1[0][2] = 3;

test1[1][0] = 4;
test1[1][1] = 5;
test1[1][2] = 6;
```

den code es in die Datei zu schreiben, bekommst du sicher selber hin.


----------



## FrankBooth (23. April 2010)

Dunas hat gesagt.:


> ```
> int test1[][]  = new int[2][3];
> test1[0][0] = 0;
> test1[0][1] = 2;
> ...




Das hatte er ja glaub ich schon


----------



## vfl_freak (23. April 2010)

@ Dunas,
ich denke mal, dass genau DAS die Frage war ..... 

```
Ich habe ein zweidimensionales Array mit int-Werten gefüllt. 
Wie kann  ich dieses (am besten in einer *.txt) abspeichern und wieder auslesen.
```


@ maddimini: das Wesentliche hat Kai008 schon geschrieben ... Du musst nur entscheiden, in welcher Reihenfolge Du Deine Werte schrieben willst. Also entweder [0][0], [0][1], [0][2] ... oder [0][0], [1][0], [2][0] ...
Das hängt dann wohl von Inhalt ab !

Gruß
Klaus


----------



## hansmueller (23. April 2010)

Hallo,

ich habe es zwar noch nie mit einem 2 dimensionalen Array probiert, aber vielleicht kannst du dafür "XMLEncoder" und "XMLDecoder" verwenden.

Erstelle eine Klasse,  
füge den Konstruktor hinzu, 
deklariere ein 2 dimensionales Array und 
füge die getter- und setter-Methode für den 2 dimensionalen Array hinzu.
(Der Konstruktor (auch wenn er leer ist) und die getter- und setter-Methoden sind für den XMLEncoder/Decoder notwendig.)

Erzeuge ein Objekt aus der Klasse. 
Befülle den Array in diesem Objekt und speichere das Objekt mit Hilfe eines FileOutputStream, den du in einen XMLEncoder leitest in eine Datei ab.

Die Datei, die du bekommst, ist eine XML-Datei. Du kannst sie mit jedem (halbwegs guten) Editor anschauen.
Gerade was Datenaustausch betrifft, ist XML gerade sehr in Mode.

Zum Auslesen der Datei mußt du den FileInputStream durch den XMLDecoder leiten und erhälts wieder dein abgespeichertes Objekt mit deinem Array.

MfG
hansmueller


----------



## FrankBooth (23. April 2010)

hansmueller hat gesagt.:


> Gerade was Datenaustausch betrifft, ist XML gerade sehr in Mode.



Ich hasse XML, was wie ich weis, keine qualifizierte Bemerkung ist 
Überleg dir gut  was du später mit den Daten machen willst. Wenn das eh nur eine Aufgabe
für die (Hoch-)Schule ist, wird es kaum nötig sein ein xml-File zu generieren.

Grüße


----------



## Anime-Otaku (23. April 2010)

2-dimensionales Array hört sich stark nach einer CSV-Datei an. Hier ist die eine Dimension die Zeile und die andere Dimension die Spalten


----------



## Dunas (23. April 2010)

FrankBooth hat gesagt.:


> Das hatte er ja glaub ich schon





vfl_freak hat gesagt.:


> @ Dunas,
> ich denke mal, dass genau DAS die Frage war .....
> 
> ```
> ...



ich weiß ich weiß ^^
das sollte nur zur veranschaulichung meiner idee dienen.
das mit der csv datei ist natürlich noch besser


----------



## Maddimini (23. April 2010)

Vielen Dank für all diese tollen Antworten,
aber die Frage bezog sich eher darauf, wie ich eine Klasse verfassen soll, die diese int-Werte in die *.txt schreibt, dass weiß ich leider nicht ;-)


----------



## Kai008 (23. April 2010)

Seltsam, wo ich es doch im ersten Post bereits beschrieben habe.


```
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ArrayIO<T>
{
	private static final ArrayIO<int[][]> INSTANCE = new ArrayIO<int[][]>();
	
	private ArrayIO()
	{
		super();
	}
	public void save(T array, File f)
	{
		try
		{
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
			oos.writeObject(array);
			oos.flush();
			oos.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	public T load(File f)
	{
		T array = null;
		try
		{
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
			array = (T) ois.readObject();
			ois.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		catch (ClassNotFoundException e)
		{
			e.printStackTrace();
		}
		return(array);
	}
	public static ArrayIO<int[][]> getInstance()
	{
		return(INSTANCE);
	}
}
```


----------



## Jellysheep (23. April 2010)

Wozu braucht man denn diese Methode? 

```
public static ArrayIO<int[][]> getInstance()
{
    return(INSTANCE);
}
```

Reicht als Aufruf nicht new ArrayIO<int[][]>()?


----------



## Kai008 (23. April 2010)

Wozu, wenn es keine Klassenvariablen gibt? ArgoUML fleht mich sonst immer an, das Singleton-Design zu benutzen.


----------

