2011-06-08 77 views
3

所以我尝试将文件通过这种方式复制到新的位置:的Java文件复制扭曲文件

FileReader in = new FileReader(strTempPath); 
FileWriter out = new FileWriter(destTempPath); 

int c; 
while ((c = in.read()) != -1){ 
    out.write(c); 
} 

in.close(); 
out.close(); 

其中一期工程的时间细99%。有时候,如果图像比较小,< = 60x80px,复制的图像会全部失真。有人知道这里可能会发生什么吗?这里是复制功能的错误,还是我应该在别处寻找?

谢谢。

+1

它很大程度上取决于您的平台的字符编码。在大多数编码中,复制二进制数据将从几个字节值中摧毁到很多字节组合。如果使用-Dfile.encoding = ISO-8859-1运行程序时,程序突然“有效”,则可以确定在某个地方尝试使用读写器来复制二进制数据。 ISO-8859-1是少数不破坏二进制数据的字符集之一,但取决于您的语言环境文本在显示时将全部是乱码。 – mihi 2011-06-08 18:38:24

回答

11

请勿使用Readers/Writers来读取二进制数据。使用nio软件包中的InputStreams/OutputStreamsChannels(请参见下文)。从exampledepot.com

实施例:

try { 
    // Create channel on the source 
    FileChannel srcChannel = new FileInputStream("srcFilename").getChannel(); 

    // Create channel on the destination 
    FileChannel dstChannel = new FileOutputStream("dstFilename").getChannel(); 

    // Copy file contents from source to destination 
    dstChannel.transferFrom(srcChannel, 0, srcChannel.size()); 

    // Close the channels 
    srcChannel.close(); 
    dstChannel.close(); 
} catch (IOException e) { 
} 
+0

对于这个问题,不要使用'Writer'作为二进制数据。 – Darien 2011-06-08 18:43:40

+0

这是否解决了问题。感谢您的帮助... – gabaum10 2011-06-09 13:24:50

+0

不适合我,我仍然有与我的文件复制后扭曲相同的问题。我的文件几乎变成了字节大小的两倍! – 2017-10-12 16:51:52