Wie konvertiere ich eine java.io.File
zu einer byte[]
?
Verwenden Sie keine hohlen Catch-Blöcke. Das erschwert die Fehlersuche.
Wie konvertiere ich eine java.io.File
zu einer byte[]
?
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);
}
}
}
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;
}
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();
}
}
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.
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; }