java Files.readAllBytes(image.png)不起作用

时间:2014-11-18 16:32:09

标签: java image bytearray

我试图从文件中读取然后写入其他文件。我用下面的代码来做这件事。

byte[] bytes = Files.readAllBytes(file1);

Writer Writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2), "UTF-8"));
for(int i=0;i<bytes.length;i++)
     Writer.write(bytes[i]);
Writer.close();

但是当我将file1更改为picture.png并将file2更改为picture2.png时,此方法不起作用,我无法使用图像查看器打开picture2.png。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

作家用于编写文本,可能采用不同的格式(即utf-8/16等)。对于写入原始字节,不要使用编写器。只需使用(File)OutputStreams。

这真的和

一样简单
byte[] bytes = ...;
FileOutputStream fos = ...;
fos.write(bytes);

答案 1 :(得分:3)

其他答案解释了为什么你可能会失败。

我很好奇为什么你已经使用了一种Java NIO方法,而不是其他方法?图书馆已经有了为你做这件事的方法。

byte[] bytes = Files.readAllBytes(file1);
Files.write(file2, bytes, StandardOpenOption.CREATE_NEW); // or relevant OpenOptions

FileOutputStream out = new FileOutputStream(file2); // or buffered
Files.copy(file1, out);
out.close();

Files.copy(file1, file2, options);

答案 2 :(得分:2)

问题是Writer.write()没有byte。它需要char,这是可变大小,通常大于一个字节。

但是,如果您已将整个内容作为byte[]读入,则可以使用Files.write()将整个数组发送到文件中的方式与读取文件的方式大致相同在:

Files.write(filename, bytes);

这是更现代的NIO习语,而不是使用OutputStream

值得一读the tutorial