Umwandlung File in Byte[]-Array

Ritchizzle

Grünschnabel
Hallo zusammen

Ich habe ein kleines Problem.

In meiner Klasse habe ich ein File als:
Code:
private File mFile = null;
deklariert. Nun sollte ich aber an ein Interface ein byte[]-Array weitergeben.

Nun zu meiner Frage, wie kann ich das File in ein byte[]-Array abfüllen?

Vielen Dank für eure Hilfe
 
Hallo,

ich nehme an, dass du eine Datei einlesen willst und den Dateiinhalt in ein Array bringen möchtest.

Dazu benötigst du folgende Elemente:

public static String sDateiname = 'Name der Datei';

// Datei zuweisen
FileReader fr = new FileReader(sDateiname);

BufferedReader br = new BufferedReader(fr);
// Feld für Eingabe definieren und ersten Satz einlesen
String sSatz = br.readLine();
String[] sErgebnis = null; // für den Split Befehl


// Schleife zum Einlesen
while ( sSatz != null)
{
// Array ersten Satz zuweisen
sErgebnis = sSatz.split(";");

if (sErgebnis.length == 0) {
iLeereElemente++;
} else {
sErgebnis[0] Inhalt erste Element vom Array;
sErgebnis[1] Inhalt zweite Element vom Array


// nächsten Satz aus der Datei lesen
sSatz = br.readLine();
}
br.close(); // Datei schliessen

}
catch ( FileNotFoundException e ) // Datei gibt’s nicht
{
System.err.println( "Datei gibt’s nicht!" );
}
catch ( IOException e ) // Schreib- Leseprobleme
{
System.err.println( "Schreib- Leseprobleme!" );
}
}

Hoffe dir weitergeholfen zu haben.
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * @author thomas.darimont
 * 
 */
public class FileAsByteArrayExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        File file = new File("c:/finish.log");
        method0(file);
        method1(file);
    }

    private static void method0(File file) throws Exception, IOException,
            UnsupportedEncodingException {
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] data = new byte[(int) file.length()];
        fileInputStream.read(data);
        fileInputStream.close();
        System.out.println(new String(data, "UTF-8"));
    }

    private static void method1(File file) throws Exception {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        FileInputStream fileInputStream = new FileInputStream(file);

        byte[] buffer = new byte[16384];

        for (int len = fileInputStream.read(buffer); len > 0; len = fileInputStream
                .read(buffer)) {
            byteArrayOutputStream.write(buffer, 0, len);
        }

        fileInputStream.close();

        System.out.println(new String(byteArrayOutputStream.toByteArray(),
                "UTF-8"));
    }

}
Finish.log ist eine einfache Textdatei mit einem String drinnen.

Gruß Tom
 
Jeah, 1a-Hilfe!!

Ok, nicht zum Thema... aber hab ich schon mal gesagt, dass das Forum hier echt weltklasse ist?! Was hab ich gefummelt, meine blöde Datei wieder einlesen zu können... und jetzt klappts auch mit dem Nachbarn... öhm, FileInputStream!

Ganz großen Dank an euch alle! :)
 
Hallo,

ich weiß, der Threat ist schon ein bißchen älter, aber ich habe ein Problem, dass auf diesem hier aufsetzt.

Ich habe eine Textdatei mit einfachen Dezimalwerten von 0-100 (also keine Zahl größer als 1 Byte) in der Form:

100
20
0
100
....

In der Datei sind wirklich nur Zahlen, keinerlei Buchstaben oder Sonderzeichen.

Mit der hier beschriebenen Methode
Code:
 FileInputStream in = new FileInputStream(file);
 byte[] data = new byte[(int) file.length()];    
in.read(data);
in.close();
System.out.println(new String(data, "UTF-8"));

wird zwar die Textdatei eingelesen, aber in byte[] data werden nur Ascii Werte gespeichert, anstatt die korrekte Zahl.
Die Zahl "100" wird im byte[] data z.B. so dargestellt:

[0] = 49 // entspricht der 1
[1] = 48 // entspricht der 0
[2] = 48 // entspricht der 0

Mit diesen Werten kann ich jedoch nichts weiterarbeiten. Da ich die "100" als richtige Zahl brauche. An dem Problem bastel ich schon knapp vier Tage aber ich komm einfach nicht drauf.

Weiß jemand eine (unkomplizierte) Lösung?
 
Hallo,

brauchst du ein Array, in dem die Zahlen drin stehen?

Als Byte-Array wirst du es so nicht hinbekommen. Du müsstest es als String einlesen und die Strings dann in Zahlen umwandeln.

MFG

Sascha
 
Ja, ich brauch zum Schluss ein Array, in dem die Zahlen wieder identisch wie im TXT stehen, also wäre das hier:

array[0] = 100
array[1] = 20
array[2] = 0

Das Ganze als String Array zu machen hatte im Prinzip funktioniert. Mein Problem ist nur, dass ich das Array dann an eine Funktion übergebe, die String nicht akzeptiert, sondern Byte will.
 
Dann wird dir nichts anderes übrig bleiben, als das String-Array in ein Byte-Array zu "konvertieren".

Code:
public byte[] toByteArray(String[] s){
    byte[] b = new byte[s.length];
    
    for (int i = 0; i < s.length; i++)
    {
      b[i] = Byte.parseByte(s[i]);
    }
    return b;
  }

MFG

Sascha
 
Hey cool es funktioniert.^^ Ich hatte schon vorher mit der Funktion "parseByte" herumgespielt, hab sie aber nie richtig zum laufen gebracht.

Vielen Dank für deine schnelle Hilfe!
 
Zurück