我试图从文件中读取然后写入其他文件。我用下面的代码来做这件事。
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。
我做错了什么?
答案 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。