Преобразование файла в байтовый массив и наоборот
Я нашел много способов преобразования файла в массив байтов и записи байтового массива в файл на диске.
Я хочу преобразовать java.io.File
в массив байтов, а затем преобразовать массив байтов в java.io.File
.
Я не хочу записывать его на хранение следующим образом:
//convert array of bytes into file
FileOutputStream fileOuputStream = new FileOutputStream("C:\\testing2.txt");
fileOuputStream.write(bFile);
fileOuputStream.close();
Я хочу как-то сделать следующее:
File myFile = ConvertfromByteArray(bytes);
Ответы
Ответ 1
Я думаю, вы неправильно поняли, что класс java.io.File
действительно представляет. Это просто представление файла в вашей системе, то есть его имя, его путь и т.д.
Вы даже посмотрели на Javadoc для класса java.io.File
? Посмотрите здесь
Если вы проверите поля, которые у него есть, или методы или аргументы конструктора, вы сразу получите подсказку о том, что все, что есть, является представлением URL/пути.
Oracle предоставляет довольно обширный учебник в учебном пособии Java File I/O с новейшей функциональностью NIO.2.
С NIO.2 вы можете прочитать его в одной строке, используя java.nio.file.Files.readAllBytes().
Аналогично вы можете использовать java.nio.file.Files.write() для записи всех байтов в вашем массиве байтов.
UPDATE
Поскольку вопрос связан с Android, более традиционным способом является обернуть FileInputStream
в BufferedInputStream
, а затем обернуть его в ByteArrayInputStream
.
Это позволит вам прочитать содержимое в byte[]
. Аналогично, их эквиваленты существуют для OutputStream
.
Ответ 2
В противном случае Попробуйте следующее:
Преобразование файла в байты
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);
}
}
}
Ответ 3
Вы не можете этого сделать. A File
является абстрактным способом ссылки на файл в файловой системе. Он не содержит самого содержимого файла.
Если вы пытаетесь создать файл в памяти, на который можно ссылаться с помощью объекта File
, вы не сможете это сделать, как описано в этот поток, этот поток и многие другие места.
Ответ 4
Apache FileUtil предоставляет очень удобные методы для преобразования
try {
File file = new File(imagefilePath);
byte[] byteArray = new byte[file.length()]();
byteArray = FileUtils.readFileToByteArray(file);
}catch(Exception e){
e.printStackTrace();
}
Ответ 5
Нет такой функциональности, но вы можете использовать временный файл File.createTempFile().
File temp = File.createTempFile(prefix, suffix);
// tell system to delete it when vm terminates.
temp.deleteOnExit();
Ответ 6
Вы не можете сделать это для файла, который является главным образом интеллектуальным пути к файлу. Можете ли вы реорганизовать свой код так, чтобы он объявлял переменные и проходил вокруг аргументов, с типом OutputStream вместо FileOutputStream? Если это так, см. Классы java.io.ByteArrayOutputStream и java.io.ByteArrayInputStream
OutputStream outStream = new ByteArrayOutputStream();
outStream.write(whatever);
outStream.close();
byte[] data = outStream.toByteArray();
InputStream inStream = new ByteArrayInputStream(data);
...