Avec Java:
J'ai un byte[]
qui représente un fichier.
Comment puis-je écrire cela dans un fichier (c.-à-d. C:\myfile.pdf
)
Je sais que c'est fait avec InputStream, mais je n'arrive pas à résoudre le problème.
Utilisez Apache Commons IO
FileUtils.writeByteArrayToFile(new File("pathname"), myByteArray)
Ou, si vous insistez pour faire du travail pour vous-même ...
try (FileOutputStream fos = new FileOutputStream("pathname")) {
fos.write(myByteArray);
//fos.close(); There is no more need for this line since you had created the instance of "fos" inside the try. And this will automatically close the OutputStream
}
Sans bibliothèques:
try (FileOutputStream stream = new FileOutputStream(path)) {
stream.write(bytes);
}
Avec Google Guava :
Files.write(bytes, new File(path));
Avec Apache Commons :
FileUtils.writeByteArrayToFile(new File(path), bytes);
Toutes ces stratégies requièrent que vous releviez également une exception IOException.
Une autre solution utilisant Java.nio.file
:
byte[] bytes = ...;
Path path = Paths.get("C:\\myfile.pdf");
Files.write(path, bytes);
Également depuis Java 7, une ligne avec Java.nio.file.Files:
Files.write(new File(filePath).toPath(), data);
Où data est votre octet [] et filePath est une chaîne. Vous pouvez également ajouter plusieurs options d'ouverture de fichier avec la classe StandardOpenOptions. Ajouter jette ou entourer avec try/catch.
À partir de Java 7 , vous pouvez utiliser l’instruction try-with-resources pour éviter les fuites de ressources et votre code plus facile à lire. Plus à ce sujet ici .
Pour écrire votre byteArray
dans un fichier, vous feriez:
try (FileOutputStream fos = new FileOutputStream("fullPathToFile")) {
fos.write(byteArray);
} catch (IOException ioe) {
ioe.printStackTrace();
}
Essayez une OutputStream
ou plus spécifiquement FileOutputStream
//////////////////////////// 1] Fichier en octet [] /////////////////// //
Path path = Paths.get(p);
byte[] data = null;
try {
data = Files.readAllBytes(path);
} catch (IOException ex) {
Logger.getLogger(Agent1.class.getName()).log(Level.SEVERE, null, ex);
}
//////////////////////// 2] Byte [] to File //////////////////////// ///////
File f = new File(fileName);
byte[] fileContent = msg.getByteSequenceContent();
Path path = Paths.get(f.getAbsolutePath());
try {
Files.write(path, fileContent);
} catch (IOException ex) {
Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
}
Je sais que c'est fait avec InputStream
En fait, vous seriez en écriture dans un sortie du fichier ...
File f = new File(fileName);
byte[] fileContent = msg.getByteSequenceContent();
Path path = Paths.get(f.getAbsolutePath());
try {
Files.write(path, fileContent);
} catch (IOException ex) {
Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
}
Vous pouvez essayer Cactoos :
new LengthOf(new TeeInput(array, new File("a.txt"))).value();
Plus de détails: http://www.yegor256.com/2017/06/22/object-oriented-input-output-in-cactoos.html
Exemple de base:
String fileName = "file.test";
BufferedOutputStream bs = null;
try {
FileOutputStream fs = new FileOutputStream(new File(fileName));
bs = new BufferedOutputStream(fs);
bs.write(byte_array);
bs.close();
bs = null;
} catch (Exception e) {
e.printStackTrace()
}
if (bs != null) try { bs.close(); } catch (Exception e) {}
Ceci est un programme où nous lisons et imprimons un tableau d'octets offset et de longueur en utilisant le constructeur de chaînes et l'écriture du tableau d'octets offset de longueur dans le nouveau fichier.
`Entrez le code ici
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.io.IOException;
//*This is a program where we are reading and printing array of bytes offset and length using StringBuilder and Writing the array of bytes offset length to the new file*//
public class ReadandWriteAByte {
public void readandWriteBytesToFile(){
File file = new File("count.char"); //(abcdefghijk)
File bfile = new File("bytefile.txt");//(New File)
byte[] b;
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream (file);
fos = new FileOutputStream (bfile);
b = new byte [1024];
int i;
StringBuilder sb = new StringBuilder();
while ((i = fis.read(b))!=-1){
sb.append(new String(b,5,5));
fos.write(b, 2, 5);
}
System.out.println(sb.toString());
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fis != null);
fis.close(); //This helps to close the stream
}catch (IOException e){
e.printStackTrace();
}
}
}
public static void main (String args[]){
ReadandWriteAByte rb = new ReadandWriteAByte();
rb.readandWriteBytesToFile();
}
}
O/P dans la console: fghij
O/P dans le nouveau fichier: cdefg