Speichern in Java

Mnemosine

Grünschnabel
Hallo

könnte mir vieleicht jemand sagen wie ich mit Java etwas z.B. einen Array voll mit infos Speichern kann.

Danke!
 
Es gibt mehrer Möglichkeiten Daten zu speichern:

Man kann zum Beispiel Daten als .txt Datei speichern:
Wird hier erklärt:
http://www.tutorials.de/forum/java/275850-array-eine-txt-schreiben.html#post1427122

Eine andere Möglichkeit ist die Serialisierung:
Java:
public void serialize(File file)
	{
		try {
			ObjectOutputStream os = new ObjectOutputStream(
			        new FileOutputStream(file));
			os.writeObject(deinZuSerialisierendesObjekt); 
//Achtung: Objekte können nur dann serialisiert werden wenn sie das Interface "Serializable" implementieren
			os.close();
		}
		catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		catch (IOException e1) {
			e1.printStackTrace();
		}
	}

Um eine serialisierte Datei zu laden muss man folgende Methode schreiben:

Java:
public boolean deserialize(File file)
	{
		ObjectInputStream is;
		try {
			is = new ObjectInputStream(new FileInputStream(file));
			datenFeld = (Typ des Datenfeldes) is.readObject();
			is.close();
			return true;

		}
		catch (FileNotFoundException e1) {
			e1.printStackTrace();
			return false;
		}
		catch (IOException e1) {
			e1.printStackTrace();
			return false;
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		}

Serialisierte Dateien kann man natürlich nur mithilfe von Java deserialisieren, während txts anderwärtig natürlich weiterverwendet werden können.
 
Zuletzt bearbeitet:
Danke aber ich habe noch ein paar fragen confused:

Was muss ich eigentlich importieren damit es funktioniert und wie Lade ich dan die Datei wenn ich sie als .txt speichere?

Danke
 
Das Array speichern:
Java:
public void save(File file)
	{
		try {
			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
                        for (int i = 0; i < array.length; i++) {
                                   writer.write(array[i] + ";");
			writer.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}

Das Array wieder laden:
Java:
public boolean load(File file)
	{
		BufferedReader reader;
		try {
			reader = new BufferedReader(new FileReader(file));
			String zeile = reader.readLine();
			while (zeile != null) {
                                  String[] values = zeile.split(";");
             //Hier hast du jetzt alle deine Werte drinnen, jetzt
             //kannst du sie wieder einfügen z.B:
                                  for (int i = 0; i < values.length; i++) {
                                  array[i] = Integer.parseInt(values[i]);
                                  }
             //So würde die Lösung für ein gespeichertes Array mit ints aussehen
             //Die Variable array muss natürlich dein datenfeld sein, in das du laden möchtest
                         }
             }
}

Um das ganze zum laufen zu bringen musst du noch

Java:
import java.io.*;

diese Importanweisung schreiben.
 
Danke
aber jetzt sagt er mir das ein int nicht gespeichert werden darf. Das ist genau was er sagt:
speichernundladen.
java:32:9: save(java.io.File) in speichernundladen cannot be applied to (int)
 
Poste doch bitte einfach mal deinen Code, vielleicht kann ich dir dann besser helfen, und schreib bitte dazu was du speichern möchtest.
 
Ich habe in leicht vereinfacht, hier ist er:
Code:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class speichernundladen extends Applet implements ActionListener {

   TextField nummerFeld;
   String text = "";
   int nummer = 0;

    public void init() {
     nummerFeld = new TextField("1");
     nummerFeld.addActionListener(this);
     add(nummerFeld);
    }

    public void actionPerformed(ActionEvent event){
       nummer = Integer.parseInt(nummerFeld.getText());
       save(nummer);
       repaint();
    }

 public void save(File file)
  {
    try {
      BufferedWriter writer = new BufferedWriter(new FileWriter(file));
      for (int i = 0; i < array.length; i++) {
        writer.write(array[i] + ";");}
      writer.close();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

man gibt eine Zahl ein und die wird gespeichert.
 
Hi,

Applets laufen in einer sogenannten Sandbox. Das heisst der SecurityManager ist aktiv. Wenn Du ihn nicht konfigurierst, darfst Du Sicherheitsrelevante Befehle nicht ausführen. Dazu gehören z.B. Dateizugriffe. Ein Applet könnste sonst unbemerkt die Platte scannen und die Daten verschicken.

Du hast mehrere Möglichkeiten

1. Sicherheitseinstellungen ändern. Geht aber nur auf der Clientseite und ist bei Applets deshalb ungeeignet.

2. Schreib Deine Daten in ein Cookie
http://www.rgagnon.com/javadetails/java-0180.html

3. Baue irgendeine Verbindung zum Server auf und speichere die Daten dort.

Gruss
 
nummer = Integer.parseInt(nummerFeld.getText());
save(nummer);

Da liegt der Fehler:

die speichern Methode braucht als Parameter eine File, in die geschrieben werden soll, du hast hingegen den int nummer verwendet.

ersetz mal die 2 Zeilen durch das hier:
Java:
nummer = Integer.parseInt(nummerFeld.getText());
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(chooser.getParent());
if (returnVal == JFileChooser.APPROVE_OPTION) {
       File file = chooser.getSelectedFile();
       save(file, nummer);
}

Hier kannst dfu mithilfe des FileChoosers die Datei auswählen in die du speichern möchtest.

natürlich müssen wir die save Methode selber anpassen.

Java:
public void save(File file, int zuSpeichern)
{
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(zuSpeichern);
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}


Ich hoffe jetzt klappt alles.
 
Jetzt funktioniert es fast, er kann nur JFileChooser nicht identifizieren.
Was mus ich importieren? und noch etwas unter wechen namen Speichert er die datei?

Danke
 
Zurück