Come scrivere un array di byte in un file in Java?Come posso scrivere un array di byte in un file in Java?
risposta
È possibile utilizzare IOUtils.write(byte[] data, OutputStream output) da Apache Commons IO.
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey key = kgen.generateKey();
byte[] encoded = key.getEncoded();
FileOutputStream output = new FileOutputStream(new File("target-file"));
IOUtils.write(encoded, output);
Come Sebastian Redl indica il più diretto ora java.nio.file.Files.write. Dettagli per questo possono essere trovati nel Reading, Writing, and Creating Files tutorial.
Vecchia risposta: FileOutputStream.write(byte[]) sarebbe la più semplice. Quali sono i dati che vuoi scrivere?
Il tutorials for Java IO system potrebbe essere di qualche utilità.
Apache Commons IO Utils ha un metodo FileUtils.writeByteArrayToFile(). Nota che se stai facendo un lavoro su file/IO, allora la libreria IO di Apache Commons farà un sacco di lavoro per te.
Link è morto (Jim). – jdv
Per scrivere un array di byte in un file utilizzare il metodo
public void write(byte[] b) throws IOException
dalla classe BufferedOutputStream.
java.io.BufferedOutputStream implementa un flusso di output bufferizzato. Impostando un tale flusso di output, un'applicazione può scrivere byte nel flusso di output sottostante senza necessariamente causare una chiamata al sistema sottostante per ogni byte scritto.
Per esempio, avete bisogno di qualcosa di simile:
String filename= "C:/SO/SOBufferedOutputStreamAnswer";
BufferedOutputStream bos = null;
try {
//create an object of FileOutputStream
FileOutputStream fos = new FileOutputStream(new File(filename));
//create an object of BufferedOutputStream
bos = new BufferedOutputStream(fos);
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey key = kgen.generateKey();
byte[] encoded = key.getEncoded();
bos.write(encoded);
}
// catch and handle exceptions...
+1 per aver menzionato BufferedOutputStream. Dovresti SEMPRE avvolgere un FileOutputStream in un BufferedOutputStream, le prestazioni sono molto migliori. –
Se tutto ciò che si desidera scrivere sul file è una chiave da 16 byte, l'avvolgimento di FileOutputStream in un BufferedOutputStream è probabilmente più lento della scrittura dei dati direttamente in FileOutputStream. – jarnbjo
@SamBarnum Puoi elaborare? Perché avvolgere il FOS in un BOS più veloce? – theJollySin
Un commentatore ha chiesto "perché utilizzare una libreria di terze parti per questo?" La risposta è che è troppo doloroso farlo da solo. Ecco un esempio di come correttamente eseguire l'operazione inversa di lettura di un array di byte da un file (scusate, questo è solo il codice che avevo prontamente disponibile, e non è che io voglia che il richiedente scriva e usi comunque questo codice):
public static byte[] toByteArray(File file) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
boolean threw = true;
InputStream in = new FileInputStream(file);
try {
byte[] buf = new byte[BUF_SIZE];
long total = 0;
while (true) {
int r = in.read(buf);
if (r == -1) {
break;
}
out.write(buf, 0, r);
}
threw = false;
} finally {
try {
in.close();
} catch (IOException e) {
if (threw) {
log.warn("IOException thrown while closing", e);
} else {
throw e;
}
}
}
return out.toByteArray();
}
Ognuno dovrebbe essere completamente sconvolto da ciò che è un dolore.
Utilizzare librerie buone. Io, ovviamente, raccomando Guava's Files.write(byte[], File).
Sono inorridito da ciò che è un dolore, ma anche che questo genere di cose non è nella libreria standard. Non stiamo parlando di un formato di file oscuro, ma spostando i byte dalla memoria al disco. –
risposta migliore: File.write di Guava (byte [], File). – jan
Come di Java 1.7, c'è un modo nuovo: java.nio.file.Files.write
import java.nio.file.Files;
import java.nio.file.Paths;
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey key = kgen.generateKey();
byte[] encoded = key.getEncoded();
Files.write(Paths.get("target-file"), encoded);
Java 1.7 risolve anche l'imbarazzo che Kevin descrive: la lettura di un file è ora:
byte[] data = Files.readAllBytes(Paths.get("source-file"));
Questo è probabilmente il metodo consigliato al giorno d'oggi. Tutta la roba di 'SecretKey' non è necessaria; chiama semplicemente 'Files.write()'. Grazie Sebastian! –
Non c'è bisogno di librerie esterne gonfiare le cose - specialmente quando si lavora con Android. Ecco una soluzione nativa che fa il trucco. Questo è un pice di codice da un'app che memorizza un array di byte come un file immagine.
// Byte array with image data.
final byte[] imageData = params[0];
// Write bytes to tmp file.
final File tmpImageFile = new File(ApplicationContext.getInstance().getCacheDir(), "scan.jpg");
FileOutputStream tmpOutputStream = null;
try {
tmpOutputStream = new FileOutputStream(tmpImageFile);
tmpOutputStream.write(imageData);
Log.d(TAG, "File successfully written to tmp file");
}
catch (FileNotFoundException e) {
Log.e(TAG, "FileNotFoundException: " + e);
return null;
}
catch (IOException e) {
Log.e(TAG, "IOException: " + e);
return null;
}
finally {
if(tmpOutputStream != null)
try {
tmpOutputStream.close();
} catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
}
- 1. In Java, come posso convertire un InputStream in un array di byte (byte [])?
- 2. Lettura di un file in un array di byte (PHP)
- 3. Java: come "tagliare" un array di byte?
- 4. Come convertire un array di byte in Base64 in Java?
- 5. Come inizializzare un array di byte in Java?
- 6. Come posso scrivere su un numero di linea specifico in un file txt in Java
- 7. PHP file di letto come un array di byte
- 8. Come convertire un array di byte in un array int?
- 9. scrivere un BitSet su un file in java
- 10. Lettura di un array di byte C# in Java
- 11. Creazione di un InputStream Java da un enumeratore [Array [Byte]]
- 12. Come posso scrivere MemoryStream di byte []
- 13. Come posso scrivere un array binario come immagine in Python?
- 14. come scrivere una matrice in un file Java
- 15. Perché scrivere molti piccoli array di byte in un file è più veloce della scrittura di un grande array?
- 16. Come posso creare un IntStream da un array di byte?
- 17. come convertire l'immagine in array di byte in java?
- 18. Python come scrivere in un file binario?
- 19. File scaricare un array di byte come un file in JavaScript/ExtJS
- 20. come scrivere array su outputStream in Java
- 21. Creare e scrivere su un file di testo in memoria e convertirlo in array di byte in una volta
- 22. Come si può Marshal un array di byte in C#?
- 23. Byte Array in Python
- 24. Come posso convertire un int64 in un array di byte in go?
- 25. Creazione di un file dall'array di byte
- 26. Come creare un array di byte in C++?
- 27. Come scrivere in un file in PHP?
- 28. Python: scrivere un file wav in numpy float array
- 29. array di byte in groove
- 30. Byte scritti in un file senza cancellare byte esistente
puoi inserire del codice e mostrare cosa esattamente vuoi scrivere nel file? –