J'ai trouvé de nombreuses façons de convertir un fichier en tableau d'octets et d'écrire tableau d'octets en fichier sur le stockage.
Ce que je veux, c'est convertir Java.io.File
en un tableau d'octets, puis reconvertit un tableau d'octets en un Java.io.File
.
Je ne veux pas l'écrire sur le stockage comme suit:
//convert array of bytes into file
FileOutputStream fileOuputStream = new FileOutputStream("C:\\testing2.txt");
fileOuputStream.write(bFile);
fileOuputStream.close();
Je veux en quelque sorte faire ce qui suit:
File myFile = ConvertfromByteArray(bytes);
Je pense que vous avez mal compris ce que le Java.io.File
La classe représente vraiment. C’est juste une représentation du fichier sur votre système, c’est-à-dire son nom, son chemin, etc.
Avez-vous même regardé le Javadoc pour le Java.io.File
classe? Regardez ici Si vous vérifiez les champs qu'il contient, les méthodes ou les arguments du constructeur, vous obtenez immédiatement l'indice que tout ce dont il s'agit est une représentation de l'URL/chemin.
Oracle fournit un didacticiel assez complet dans leur didacticiel d'E/S de fichier Java , avec la dernière fonctionnalité de NIO.2.
Avec NIO.2, vous pouvez le lire sur une seule ligne avec Java.nio.file.Files.readAllBytes () .
De même, vous pouvez utiliser Java.nio.file.Files.write () pour écrire tous les octets de votre tableau d'octets.
[~ # ~] met à jour [~ # ~]
Puisque la question est étiquetée Android, la méthode la plus classique consiste à envelopper le FileInputStream
dans un BufferedInputStream
, puis dans un ByteArrayInputStream
. Cela vous permettra de lire le contenu dans un byte[]
. De même, leurs homologues existent pour le OutputStream
.
Sinon, essayez ceci:
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.IOException;
public class Temp {
public static void main(String[] args) {
File file = new File("c:/EventItemBroker.Java");
byte[] b = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(b);
for (int i = 0; i < b.length; i++) {
System.out.print((char)b[i]);
}
} catch (FileNotFoundException e) {
System.out.println("File Not Found.");
e.printStackTrace();
}
catch (IOException e1) {
System.out.println("Error Reading The File.");
e1.printStackTrace();
}
}
}
public class WriteByteArrayToFile {
public static void main(String[] args) {
String strFilePath = "Your path";
try {
FileOutputStream fos = new FileOutputStream(strFilePath);
String strContent = "Write File using Java ";
fos.write(strContent.getBytes());
fos.close();
}
catch(FileNotFoundException ex) {
System.out.println("FileNotFoundException : " + ex);
}
catch(IOException ioe) {
System.out.println("IOException : " + ioe);
}
}
}
Tu ne peux pas faire ça. Un File
n'est qu'un moyen abstrait de faire référence à un fichier dans le système de fichiers. Il ne contient aucun contenu du fichier lui-même.
Si vous essayez de créer un fichier en mémoire auquel vous pouvez vous référer à l'aide d'un objet File
, vous ne pourrez pas le faire non plus, comme expliqué dans ce fil , ce fil , et beaucoup d'autres endroits ..
Apache FileUtil donne des méthodes très pratiques pour effectuer la conversion
try {
File file = new File(imagefilePath);
byte[] byteArray = new byte[file.length()]();
byteArray = FileUtils.readFileToByteArray(file);
}catch(Exception e){
e.printStackTrace();
}
Vous ne pouvez pas le faire pour File, qui est principalement un chemin de fichier intelligent. Pouvez-vous refactoriser votre code afin qu'il déclare les variables et transmette les arguments, avec le type OutputStream au lieu de FileOutputStream? Si tel est le cas, voir les classes Java.io.ByteArrayOutputStream et Java.io.ByteArrayInputStream
OutputStream outStream = new ByteArrayOutputStream();
outStream.write(whatever);
outStream.close();
byte[] data = outStream.toByteArray();
InputStream inStream = new ByteArrayInputStream(data);
...
Il n’existe pas de telle fonctionnalité, mais vous pouvez utiliser un fichier temporaire de File.createTempFile () .
File temp = File.createTempFile(prefix, suffix);
// tell system to delete it when vm terminates.
temp.deleteOnExit();
@RequestMapping("/download")
public byte[] download() throws Exception {
File f = new File("C:\\WorkSpace\\Text\\myDoc.txt");
byte[] byteArray = new byte[(int) f.length()];
byteArray = FileUtils.readFileToByteArray(f);
return byteArray;
}
private ResponseEntity<byte[]> getDownload(){
URI end = URI.create(your url which server has exposed i.e. bla
bla/download);
return rest.getForEntity(end,byte[].class);
}
public static void main(String[] args) throws Exception {
byte[] byteArray = new TestClient().getDownload().getBody();
FileOutputStream fos = new
FileOutputStream("C:\\WorkSpace\\testClient\\abc.txt");
fos.write(byteArray);
fos.close();
System.out.println("file written successfully..");
}