Wie konvertiere ich eine java.io.File
zu einer byte[]
?
Es gibt bereits eine Antwort mit diesem Vorschlag von Tom aus dem Jahr 2009
Wie konvertiere ich eine java.io.File
zu einer byte[]
?
ReadFully Liest b.length Bytes aus dieser Datei in das Byte-Array, beginnend mit dem aktuellen Dateizeiger. Diese Methode liest wiederholt aus der Datei, bis die gewünschte Anzahl von Bytes gelesen wurde. Diese Methode blockiert, bis die angeforderte Anzahl von Bytes gelesen wurde, das Ende des Datenstroms erkannt wurde oder eine Ausnahme ausgelöst wurde.
RandomAccessFile f = new RandomAccessFile(fileName, "r");
byte[] b = new byte[(int)f.length()];
f.readFully(b);
Wenn Sie Bytes in einen vorher zugewiesenen Byte-Puffer lesen wollen, kann diese Antwort helfen.
Ihre erste Vermutung wäre wahrscheinlich die Verwendung von InputStream read(byte[])
. Diese Methode hat jedoch einen Fehler, der ihre Verwendung unangemessen schwierig macht: Es gibt keine Garantie, dass das Array tatsächlich vollständig gefüllt wird, selbst wenn kein EOF auftritt.
Werfen Sie stattdessen einen Blick auf DataInputStream readFully(byte[])
. Dies ist ein Wrapper für Eingabeströme und hat das oben erwähnte Problem nicht. Außerdem gibt diese Methode einen Fehler aus, wenn ein EOF auftritt. Viel netter.
Der folgende Weg konvertiert nicht nur eine java.io.File in ein byte[], ich habe auch herausgefunden, dass es der schnellste Weg ist, eine Datei einzulesen, als ich viele verschiedene Methoden zum Lesen von Java-Dateien gegeneinander:
java.nio.file.Files.readAllBytes()
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class ReadFile_Files_ReadAllBytes {
public static void main(String [] pArgs) throws IOException {
String fileName = "c:\\temp\\sample-10KB.txt";
File file = new File(fileName);
byte [] fileBytes = Files.readAllBytes(file.toPath());
char singleChar;
for(byte b : fileBytes) {
singleChar = (char) b;
System.out.print(singleChar);
}
}
}
//The file that you wanna convert into byte[]
File file=new File("/storage/0CE2-EA3D/DCIM/Camera/VID_20190822_205931.mp4");
FileInputStream fileInputStream=new FileInputStream(file);
byte[] data=new byte[(int) file.length()];
BufferedInputStream bufferedInputStream=new BufferedInputStream(fileInputStream);
bufferedInputStream.read(data,0,data.length);
//Now the bytes of the file are contain in the "byte[] data"
Dieser Code kann zwar eine Lösung für die Frage bieten, aber es ist besser, den Kontext zu erläutern, warum/wie er funktioniert. Dies kann zukünftigen Benutzern helfen, zu lernen und dieses Wissen auf ihren eigenen Code anzuwenden. Es ist auch wahrscheinlich, dass Sie positives Feedback von Nutzern in Form von Upvotes erhalten, wenn der Code erklärt wird.
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.
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; }