Input/Output Dateien einlesen und ausgeben

Diskutiere Dateien einlesen und ausgeben im Java Basics - Anfänger-Themen Bereich.
A

ArturS

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 :)
 
mihe7

mihe7

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.
 
A

ArturS

Du willst eine Datei kopieren? Ja, das ist möglich.
Nein ich will keine Datei kopieren, ich möchte aus einer Datei die ich zuvor Byteweise in eine Liste eingelesen habe die ursprüngliche Datei erstellen (Aus dieser Liste, wenn möglich dann wie? mit FileOutPutStream?

Das mit der For Schleife habe ich verstanden. Danke
 
mihe7

mihe7

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.
 
F

fhoffmann

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:
A

ArturS

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.
müsste ich dann einfach dieses byte-Array in FileOutPutStream packen oder wie funktioniert das richtig?
 
F

fhoffmann

Die Methode public int read() von InputStream liest ein Byte ein und gibt einen int (4 Byte) zurück!
 
mihe7

mihe7

@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);
 
Thema: 

Dateien einlesen und ausgeben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben