935 Stimmen

Datei zu byte[] in Java

Wie konvertiere ich eine java.io.File zu einer byte[] ?

0 Stimmen

Eine Anwendung, die ich mir vorstellen kann, ist das Lesen von serialisierten Objekten aus einer Datei.

2 Stimmen

Eine andere Möglichkeit besteht darin, den Dateityp anhand der Kopfzeile zu ermitteln.

0 Stimmen

Try This byte[] bytes = null; BufferedInputStream fileInputStream = null; try{File file = new File(filePath); fileInputStream = new BufferedInputStream(new FileInputStream(file)); //fileInputStream = Thread. currentThread().getContextClassLoader().getResourceAsStream(this.filePath); bytes = new byte[(int) file.length()]; fileInputStream.read(bytes); } catch(FileNotFoundException ex){ throw ex; }

4voto

mazatwork Punkte 1215
public static byte[] readBytes(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[32 * 1024];
    int bufferSize = 0;
    for (;;) {
        int read = inputStream.read(buffer, bufferSize, buffer.length - bufferSize);
        if (read == -1) {
            return Arrays.copyOf(buffer, bufferSize);
        }
        bufferSize += read;
        if (bufferSize == buffer.length) {
            buffer = Arrays.copyOf(buffer, bufferSize * 2);
        }
    }
}

4voto

Andreas Dolk Punkte 110776

Lassen Sie mich eine weitere Lösung hinzufügen, ohne Bibliotheken von Drittanbietern zu verwenden. Sie verwendet ein Muster für die Behandlung von Ausnahmen, das vorgeschlagen wurde von Scott ( リンク ). Und ich habe den hässlichen Teil in eine separate Nachricht verschoben (ich würde ihn in einer FileUtils-Klasse verstecken ;) )

public void someMethod() {
    final byte[] buffer = read(new File("test.txt"));
}

private byte[] read(final File file) {
    if (file.isDirectory())
        throw new RuntimeException("Unsupported operation, file "
                + file.getAbsolutePath() + " is a directory");
    if (file.length() > Integer.MAX_VALUE)
        throw new RuntimeException("Unsupported operation, file "
                + file.getAbsolutePath() + " is too big");

    Throwable pending = null;
    FileInputStream in = null;
    final byte buffer[] = new byte[(int) file.length()];
    try {
        in = new FileInputStream(file);
        in.read(buffer);
    } catch (Exception e) {
        pending = new RuntimeException("Exception occured on reading file "
                + file.getAbsolutePath(), e);
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (Exception e) {
                if (pending == null) {
                    pending = new RuntimeException(
                        "Exception occured on closing file" 
                             + file.getAbsolutePath(), e);
                }
            }
        }
        if (pending != null) {
            throw new RuntimeException(pending);
        }
    }
    return buffer;
}

2voto

Muhammad Aamir Ali Punkte 19629

Ein anderer Weg zum Lesen von Bytes aus einer Datei

Reader reader = null;
    try {
        reader = new FileReader(file);
        char buf[] = new char[8192];
        int len;
        StringBuilder s = new StringBuilder();
        while ((len = reader.read(buf)) >= 0) {
            s.append(buf, 0, len);
            byte[] byteArray = s.toString().getBytes();
        }
    } catch(FileNotFoundException ex) {
    } catch(IOException e) {
    }
    finally {
        if (reader != null) {
            reader.close();
        }
    }

0 Stimmen

Verwenden Sie keine hohlen Catch-Blöcke. Das erschwert die Fehlersuche.

2voto

Maifee Ul Asad Punkte 2775

Versuchen Sie dies:

import sun.misc.IOUtils;
import java.io.IOException;

try {
    String path="";
    InputStream inputStream=new FileInputStream(path);
    byte[] data=IOUtils.readFully(inputStream,-1,false);
}
catch (IOException e) {
    System.out.println(e);
}

0 Stimmen

Dazu ist eine bestimmte JRE-Implementierung erforderlich, die die Anwendung beschädigt, wenn sie unter einer anderen JRE ausgeführt wird.

2 Stimmen

Kleiner Fehler: ist IOException und nicht IOexception, aber danke:)

1 Stimmen

@MatanMarciano: mein Fehler

1voto

Tamim Attafi Punkte 1682

So einfach geht's (Kotlin-Version)

val byteArray = File(path).inputStream().readBytes()

EDITAR :

Ich habe Dokumente gelesen von readBytes Methode. Hier steht:

Liest diesen Stream vollständig in ein Byte-Array. Nota : Es liegt in der Verantwortung des Anrufers, diesen Stream zu schließen.

Um den Stream zu schließen und gleichzeitig alles sauber zu halten, verwenden Sie den folgenden Code:

val byteArray = File(path).inputStream().use { it.readBytes() }

Vielen Dank an @user2768856 für den Hinweis auf dieses Problem.

1 Stimmen

Verwenden Sie File(path).inputStream().use { it.readBytes() }, dann wird Ihr Stream geschlossen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X