Input/Output Dateien einlesen und ausgeben

ArturS

Mitglied
Hallo zusammen,

ich habe ein Problem,
ich möchte eine Datei Byteweise einlesen und diese in ein Array speichern.
Dieses Array dann wieder zurück konvertieren in eine vorherige Datei ( z.b jpg oder mp3 usw..), ist das überhaupt möglich? Oder ist die Datei in ihre Bytestückchen zerschnippselt und man kann es nicht mehr wieder zusammenfügen?
Hier mein Code:


Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

public class DataInput {

    public DataInput() throws IOException {
        File sourceFile = new File("/home/supervisor/Dokumente/datei.txt");

        FileInputStream in = new FileInputStream(sourceFile); 

        ArrayList array = new ArrayList();
        ArrayList testarray = new ArrayList();

        for (int i; (i = in.read()) != -1;) { // Lese Datei in array ein
            array.add(in.read());
            testarray.add(i);
        }

        // Ausgabe des arrays
        System.out.println(array);
        System.out.println(testarray);
        System.out.println(testarray.size());

        // Hier dieses Array wieder zusammenfügen zu dieser Datei??
        // FileOutputStream ???
    }
}

Noch eine Frage wieso bekomme ich zwei verschiedene Arrays als Ausgabe bei
Java:
        for (int i; (i = in.read()) != -1;) { // Lese Datei in array ein

            array.add(in.read());  //Hier

            testarray.add(i);        // Hier  Was ist der unterschied

        }

Danke schonmal 🙂
 
Dieses Array dann wieder zurück konvertieren in eine vorherige Datei ( z.b jpg oder mp3 usw..), ist das überhaupt möglich?
Du willst eine Datei kopieren? Ja, das ist möglich.

Noch eine Frage wieso bekomme ich zwei verschiedene Arrays als Ausgabe bei
Du liest ein Byte aus der Datei und speicherst es in i ab (in Bedingung der for-Schleife). Im Schleifenrumpf liest Du erneut ein Byte aus der Datei ein und fügst es der Liste array hinzu (btw: array ist ein ungünstiger Name für eine Liste). Das zuvor eingelesene Byte (i) fügst Du dagegen testarray hinzu.
 
Byteweise in eine Liste einzulesen, wäre äußerst ungünstig. Besser ist es, ein Byte-Array zu verwenden. Und ja, rausschreiben kannst Du mit FileOutputStream.
 
Java:
        for (int i; (i = in.read()) != -1;) { // Lese Datei in array ein
            array.add(in.read());
            // ...
Du rufst hier zweimal hintereinander in.read() auf. Dadurch speicherst du nur jedes zweite Zeichen in deiner Liste array (und die andere Hälfte in testarray).
 
Zuletzt bearbeitet:
@ArturS um z. B. bis zu 1 KiB aus einer Datei einzulesen und wieder auszugeben:
Java:
byte[] buf = new byte[1024];
int n = in.read(buf);
out.write(buf, 0, n);
 

Zurück
Oben