Comment écrire un tableau d'octets dans un fichier en Java?
Réponses
Trop de publicités?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.
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"));
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).
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...