Wie können Byte-Arrays in Dateien geschrieben und aus diesen wieder ausgelesen werden?
Aus Demonstrationsgründen ist das Beispiel möglichst knapp gehalten. So wird hier z.B. auf die Prüfung der Existenz der Speicherdatei verzichtet. Bei Bedarf kann dies unter 'Datei erzeugen' nachgelesen werden.
In der main()-Methode wird ein Objekt der Beispielklasse gebildet und auf diesem dann nacheinander die Methoden writeData() und readData() aufgerufen.
Speichern des Arrays
Der Methode writeData() werden zwei Parameter übergeben: das
zu speichernde Array und der vollständige Pfad (hier zum
Dateinamen verkürzt) der Speicherdatei. Nach der Bildung
eines File-Objektes wird ein FileOutputStream erzeugt, mit dessen
Hilfe die binären Daten in die Datei geschrieben werden. Dies
geschieht innerhalb eines try-catch-Blockes, durch den Probleme
beim Speichern oder bei Nichtexistenz der Datei abgefangen werden.
Das
Speichern selbst übernimmt die Methode write() des
FileOutputStream-Objektes. Dieser muss nach getaner Arbeit
geschlossen und beendet werden. Bei Erfolg wird true
zurück gegeben.
Lesen des Arrays
Das Auslesen der Datei geschieht in der Methode readData()
prinzipiell auf umgekehrte Weise:
Auch hier wird zunächst
ein File-Objekt gebildet, dann jedoch werden ein FileInputStream
und ein Byte-Array deklariert.
Innerhalb des try-catch-Blockes,
der hier die gleiche Funktion übernimmt wie oben
erwähnt, werden das Stream-Objekt und das Array
initialisiert. Die Länge des Arrays wird hierbei aus der
Größe der Datei ermittelt. Das Lesen selbst wird hier
durch die Methode read() des FileInputStreams geleistet, dem das
noch leere Array als Parameter übergeben wird.
Wichtig:
Der Stream muss anschließend geschlossen werden.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteArraySpeichern {
private boolean writeData(byte[] data, String fileName) {
File file = new File(fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(data);
fos.flush();
return true;
} catch (FileNotFoundException e) {
System.err.println(file + " doesn't exist!");
} catch (IOException e) {
System.err.println("Problems writing data to " + file);
} finally {
try {
if(fos != null) fos.close();
}catch(IOException e){}
}
return false;
}
private byte[] readData(String fileName) {
File file = new File(fileName);
FileInputStream fis = null;
byte[] data = null;
try {
fis = new FileInputStream(file);
data = new byte[(int) file.length()];
fis.read(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fis != null) fis.close();
} catch (IOException e) {}
}
return data;
}
public static void main(String[] args) {
String txt = "Eine Eingabe";
String fileName = "test";
ByteArraySpeichern bas = new ByteArraySpeichern();
if (bas.writeData(new String(txt).getBytes(), fileName))
System.out.println("'" + txt
+ "' erfolgreich als byte[] gespeichert");
String ergebnis = new String(bas.readData(fileName));
System.out.println("Aus Datei gelesen: '" + ergebnis + "'");
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.