【问题标题】:Java copy files distorting fileJava复制文件扭曲文件
【发布时间】:2011-09-11 02:55:53
【问题描述】:

所以我试图以这种方式将文件复制到新位置:

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% 的情况下都能正常工作。有时,如果图像相当小,

谢谢。

【问题讨论】:

  • 这在很大程度上取决于您平台的字符编码。在大多数编码中,复制二进制数据会破坏从几个字节值到很多字节组合。如果您使用 -Dfile.encoding=ISO-8859-1 运行程序突然“工作”,您可以确定在某些地方您尝试使用读取器/写入器来复制二进制数据。 ISO-8859-1 是为数不多的不破坏二进制数据的字符集之一,但根据您的语言环境,文本在显示时将是乱码。

标签: java file-io file-copying


【解决方案1】:

不要使用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) {
}

【讨论】:

  • 就此而言,也不要将Writer 用于二进制数据。
  • 不适合我,我仍然遇到同样的问题,我的文件在复制后被扭曲。我的文件几乎变成了字节大小的两倍!
  • 是的,我遇到了与 commons io 相同的问题,大小差异相同。这很奇怪,但如果我发现了什么,我会在这里发布。当我检查二进制文件时,编码不同,不知道为什么。谢谢!
  • "当我检查二进制文件时,编码不同。"这是什么意思?
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多