在Java中将字节[]写入文件[关闭]

Posted

技术标签:

【中文标题】在Java中将字节[]写入文件[关闭]【英文标题】:Write byte[] to File in Java [closed] 【发布时间】:2011-10-13 07:20:41 【问题描述】:

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

byte[] objFileBytes, File objFile

【问题讨论】:

“将字节数组转换为文件对象”除了要将字节写入文件之外,没有任何其他意义。关于如何做到这一点,您至少有 3 个不同的答案。这就是你所追求的吗?否则,请澄清。 我正在用 android 开发...我有一个文件保存在磁盘中加密并解锁加密所以我得到了字节数组所以我想将它们转换为文件以在 pdf 中显示 pdf 文件查看器,但没有将文件保存在磁盘中而不加密 嗯,那是完全不同的事情。您想从本质上像 MemoryFile (developer.android.com/reference/android/os/MemoryFile.html) 之类的东西启动 pdf 查看器。不知道你会怎么做,或者你如何显示pdf。您是否可以添加一些代码或信息来说明您实际调用 pdf 查看器的方式?您使用的是哪个查看器? 请更改问题和标题以反映您正在询问与 PDF 相关的内容这一事实。问题现在看起来很混乱。 -1 这个问题与你想知道的完全无关。创建一个新问题并询问“如何在 Android 上从内存中的字节呈现 PDF?” 【参考方案1】:

文件对象不包含文件的内容。它只是指向硬盘驱动器(或其他存储介质,如 SSD、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。这模拟了一个 InputStream,您可以将其传递给大多数类。

ByteArrayInputStream bais = new ByteArrayInputStream(yourBytes);

【讨论】:

文件对象为空?而且我不希望将任何内容保存在磁盘中...可以在内存中,那么如何将字节数组转换为文件对象 我得到这个 java.io.IOException: open failed: EACCES (Permission denied) in android application while writing BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(yourFile)); @SanketThakkar:您可能没有在该位置写入文件的写入权限(权限)。尝试不同的位置。【参考方案2】:
public void writeToFile(byte[] data, String fileName) throws IOException
  FileOutputStream out = new FileOutputStream(fileName);
  out.write(data);
  out.close();

【讨论】:

文件对象为空?而且我不希望将任何内容保存在磁盘中...可以在内存中,那么如何将字节数组转换为文件对象 文件只是文件和目录路径名的抽象表示。它不包含文件的内容。并且根据定义,file 不能在内存中,所以你不能做你想做的事。你为什么要那样做,这没有多大意义?如果您解释说也许人们可以提出其他建议。 我正在用 android 开发...我有一个文件保存在磁盘中加密并解锁加密所以我得到了字节数组所以我想将它们转换为文件以在 pdf 中显示 pdf 文件查看器,但没有将文件保存在磁盘中而不加密 那是完全不同的东西。我不知道这是否可能。【参考方案3】:

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

但这是没有意义的。请说明您要达到的目标。

【讨论】:

他解释了他真正想要什么,请检查 cmets Tnx,在阅读了我的结论后,我得出结论他太无能,无法提供帮助。我的意思是,他至少需要意识到他正在尝试解决的问题并提供相关信息,但在这两个方面都不是这样。 我对投反对票感到难过,因为我是这里为数不多的回答问题的人之一。【参考方案5】:

见How to render PDF in Android。看起来您可能别无选择,只能将内容保存到 SD 文件上的(临时)以便能够在 pdf 查看器中显示。

【讨论】:

本题与PDF无关 @MikeKeskinov 阅读了提问者的评论。它与 PDF 有关。 那么我反对这个问题。我在尝试查找信息如何将字节 [] 保存到文件时发现了这个问题。问题本身没有提到PDF。需要更改问题和标题,否则会令人困惑。

以上是关于在Java中将字节[]写入文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将字节写入 ofstream

在 Python 中将二进制数据写入文件

在Java中将字节[]转换为“文件”[重复]

java中输出流不关闭为啥不能写入

Go-文件目录操作分类详解(创建打开关闭读取写入判断等)

在 PHP 中将大文件写入磁盘的最佳方法是啥?