Java中将byte[]写入文件

33

如何在Java中将字节数组转换为文件?

byte[] objFileBytes, File objFile

1
“将字节数组转换为文件对象”除了想要将字节写入文件之外,没有其他意义。下面至少有3个不同的答案可以告诉您如何实现它。这是你想要的吗?否则,请澄清。 - pap
1
我正在开发Android应用程序...我有一个保存在磁盘上加密的文件,解锁加密后得到字节数组,所以我想将它们转换为文件以在PDF查看器中显示PDF文件,但不保存未加密的文件到磁盘。 - farajnew
1
那就完全不同了。您想要从类似MemoryFile(http://developer.android.com/reference/android/os/MemoryFile.html)的东西中启动pdf查看器。不太确定您将如何做到这一点,或者如何显示pdf。您是否有一些关于如何调用PDF查看器的代码或信息可以添加?您使用的是哪个查看器? - pap
请更改问题和标题以反映您正在询问与PDF相关的事情。目前问题看起来令人困惑。 - Mike Keskinov
2
-1 这个问题与您想了解的完全无关。创建一个新问题并询问“如何从内存中的字节在Android上呈现PDF?” - Aaron Digulla
5个回答

90
一个文件对象并不包含文件的内容。它仅是指向硬盘上(或其他存储介质,如固态硬盘、USB驱动器、网络共享)文件的指针。因此,我认为你想要的是将其写入硬盘。
您必须使用Java API中的一些类来编写文件。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(yourFile));
bos.write(fileBytes);
bos.flush();
bos.close();

您也可以使用Writer而不是OutputStream。使用Writer将允许您编写文本(String,char [])。

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

既然你说你想把一切都保存在内存中,又不想写什么东西,那么你可以尝试使用ByteArrayInputStream。这个类模拟了一个输入流,你可以将其传递给大多数类。

ByteArrayInputStream bais = new ByteArrayInputStream(yourBytes);

文件对象为空?我不想将任何内容保存在磁盘中...它可以存在于内存中,那么如何将字节数组转换为文件对象。 - farajnew
1
在 Android 应用程序中,当我写入 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(yourFile)) 时,出现了 java.io.IOException: open failed: EACCES(权限被拒绝)的错误。 - Sanket Thakkar
@SanketThakkar:你可能没有在那个位置写入文件的写入权限。尝试使用其他位置。 - Martijn Courteaux

27
public void writeToFile(byte[] data, String fileName) throws IOException{
  FileOutputStream out = new FileOutputStream(fileName);
  out.write(data);
  out.close();
}

文件对象是空的?我不想将任何东西保存在磁盘中...保存在内存中也可以,那么如何将字节数组转换为文件对象。 - farajnew
2
文件只是文件和目录路径名的抽象表示,它不包含文件内容。而且根据定义,file 不能在内存中,所以你无法做到你想要的。为什么你还想这样做呢?这没有太多意义。如果你解释一下原因,也许人们可以给出其他建议。 - Caner
我正在开发Android应用程序...我有一个保存在磁盘上的加密文件,解锁加密后得到字节数组,现在我想将它们转换为文件以在PDF查看器中显示PDF文件,但不想将文件保存在磁盘上或进行加密。 - farajnew
那是完全不同的事情。我不知道是否可能。 - Caner

5
使用FileOutputStream。
FileOutputStream fos = new FileOutputStream(objFile);
fos.write(objFileBytes);
fos.close();

4

好的,你要求了:

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);

但这没有意义。请明确你想要实现什么目标。

他解释了他实际想要的,麻烦请查看评论。 - Caner
6
谢谢,读完后我得出结论他对于帮助不够了解。我的意思是他需要至少意识到他试图解决的问题并提供相关信息,但这两点都不符合要求。 - Adriaan Koster
我对这些踩票感到难过,因为我是少数几个按照问题要求回答的人之一。 - Adriaan Koster

1

请参考如何在Android中呈现PDF。看起来您可能没有其他选择,除了将内容保存到SD文件的(临时)位置,以便能够在pdf查看器中显示它。


这个问题与PDF无关。 - Mike Keskinov
@MikeKeskinov请阅读提问者的评论。它与PDF有关。 - pap
2
然后我会给这个问题点个踩。当我试图查找如何将byte[]保存到文件的信息时,我发现了这个问题。问题本身并没有提到PDF。需要更改问题和标题,否则会令人困惑。 - Mike Keskinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接