2011-07-26 48 views
22

如何將字節數組轉換爲Java中的File?在Java中將byte []寫入File

byte[] objFileBytes, File objFile 
+1

「將字節數組轉換爲File對象」除了要將字節寫入文件以外,沒有任何意義。關於如何做到這一點,您至少有3個不同的答案。這是你在追求什麼?否則,請澄清。 – pap

+1

我正在開發的android ...我有一個文件保存在磁盤加密和解鎖加密,所以我得到的字節數組,所以我想將它們轉換爲文件,以顯示在pdf查看器的PDF文件,但沒有保存文件沒有加密的磁盤 – farajnew

+1

那麼,那是一個完全不同的東西。你想從一個MemoryFile(http://developer.android.com/reference/android/os/MemoryFile.html)啓動一個pdf查看器。不知道你會怎麼做,或者你如何顯示PDF。你有一些代碼或信息可以增加你實際調用PDF查看器的方式嗎?你正在使用哪個瀏覽器? – pap

回答

57

一個File對象不包含文件的內容。它只是指向硬盤(或其他存儲介質,如SSD,USB驅動器,網絡共享)上文件的指針。所以我想你想要的是將它寫入硬盤。

你必須寫使用一些類文件的Java API

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(yourFile)); 
bos.write(fileBytes); 
bos.flush(); 
bos.close(); 

你也可以使用一個作家,而不是一個OutputStream的英寸使用編寫器將允許您編寫文本(字符串,字符[])。

BufferedWriter bw = new BufferedWriter(new FileWriter(yourFile)); 

既然你說你想保留在內存中的一切,不想寫什麼,你可以嘗試使用ByteArrayInputStream。這模擬了一個InputStream,你可以傳遞給大部分的類。

ByteArrayInputStream bais = new ByteArrayInputStream(yourBytes); 
+0

文件對象爲空?並且我不想要任何東西被保存在磁盤...它可以在內存中,所以如何將字節數組轉換爲文件對象 – farajnew

+1

我得到了這個java.io.IOException:打開失敗:EACCES(權限被拒絕)在Android應用程序在編寫BufferedOutputStream時bos = new BufferedOutputStream(new FileOutputStream(yourFile)); –

+0

@SanketThakkar:您可能沒有寫入權限(權限)在該位置寫入文件。嘗試不同的位置。 –

4

使用FileOutputStream。

FileOutputStream fos = new FileOutputStream(objFile); 
fos.write(objFileBytes); 
fos.close(); 
19
public void writeToFile(byte[] data, String fileName) throws IOException{ 
    FileOutputStream out = new FileOutputStream(fileName); 
    out.write(data); 
    out.close(); 
} 
+0

文件對象爲空?我不希望任何東西被保存在磁盤中......它可以在內存中,所以如何將字節數組轉換爲文件對象 – farajnew

+2

文件只是文件和目錄路徑名的抽象表示。它不包含文件的內容。根據定義,「文件」不能存在於內存中,所以你不能做你想做的事。無論如何,你爲什麼要這樣做,這沒有多大意義?如果你解釋說也許人們可以提出其他建議。 – Caner

+0

我正在開發的android ...我有一個文件保存在磁盤加密和解鎖加密,所以我得到的字節數組,所以我想將它們轉換爲文件,以顯示PDF文件在PDF查看器,但沒有保存文件沒有加密的磁盤 – farajnew

3

好吧,你問它:

File file = new File("myfile.txt"); 

// convert File to byte[] 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos); 
oos.writeObject(file); 
bos.close(); 
oos.close(); 
byte[] bytes = bos.toByteArray(); 

// convert byte[] to File 
ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
ObjectInputStream ois = new ObjectInputStream(bis); 
File fileFromBytes = (File) ois.readObject(); 
bis.close(); 
ois.close(); 

System.out.println(fileFromBytes); 

但是,這是毫無意義的。請說明你想要達到的目標。

+0

他解釋了他真正想要的東西,請查看評論 – Caner

+6

Tnx,看完後我認爲他太無能爲力了。我的意思是,他需要至少意識到他正試圖解決的問題並提供相關信息,而這兩方面都不是這種情況。 –

+0

由於我是這裏爲數不多的回答問題的人之一,因此我對可憐的選票感到悲傷。 –

1

請參閱How to render PDF in Android。看起來您可能沒有任何選擇,除了將內容保存到SD文件(臨時)以便能夠在PDF查看器中顯示它。

+0

這個問題與PDF –

+0

@MikeKeskinov無關,請閱讀提問者的評論。它與PDF有關。 – pap

+0

然後我是投票表決的問題。我在嘗試查找信息時發現這個問題如何將byte []保存到文件。這個問題本身並沒有提到PDF。需要更改問題和標題,否則會令人困惑。 –