Wie können Byte-Arrays in Dateien geschrieben und aus diesen wieder ausgelesen werden?

In vielen Fällen (z.B. bei Verschlüsselungen, etc) werden Daten nicht als Strings, sondern z.B. binär als Byte-Arrays in Dateien abgespeichert. Das Beispiel zeigt, wie diese geschrieben und wieder ausgelesen werden können.

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.