69 votes

Comment puis-je écrire un tableau d'octets dans un fichier en Java?

Comment écrire un tableau d'octets dans un fichier en Java?

74voto

mlk Points 7270

Comme Sebastian Redl points le plus simple maintenant de java.nio.fichier.Les fichiers.écrire. Les détails de ce qui peut être trouvé dans la Lecture, l'Écriture et la Création de Fichiers tutoriel.


Vieille réponse: FileOutputStream.write(byte[]) serait le plus simple. Qu'est-ce que les données que vous voulez écrire?

Les tutoriels Java IO système peut être de quelque utilité pour vous.

32voto

Sebastian Redl Points 18816

Comme de Java 1.7, il y a une nouvelle façon: 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 résout également le la gêne que Kevin décrit: la lecture d'un fichier est maintenant:

byte[] data = Files.readAllBytes(Paths.get("source-file"));

16voto

Kevin Bourrillion Points 19677

Un intervenant a demandé "pourquoi utiliser une bibliothèque tierce pour cela?" La réponse est que c'est trop de douleur pour le faire vous-même. Voici un exemple de comment correctement faire l'opération inverse de la lecture d'un tableau d'octets à partir d'un fichier (désolé, c'est juste le code, je l'ai eu facilement disponible, et il n'est pas comme je veux que la personne à fait coller et utiliser ce code de toute façon):

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(); 
 }

Tout le monde devrait être complètement consterné par ce qu'est une douleur qui est.

Utilisation De Bibliothèques De Qualité. J', sans surprise, à recommander Goyave de Fichiers.write(byte[], Fichier).

12voto

JuanZe Points 4519

Pour écrire un tableau d'octets dans un fichier, utilisez la méthode

public void write(byte[] b) throws IOException

de BufferedOutputStream classe.

java.io.BufferedOutputStream met en œuvre un tampon flux de sortie. Par la mise en place d'un tel flux de sortie, une application peut écrire des octets pour le sous-flux de sortie sans nécessairement causer un appel au système sous-jacent pour chaque octet écrit.

Pour votre exemple, vous avez besoin de quelque chose comme:

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...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X