Java/Groovy 文件 IO 用图像文件自己的内容替换图像文件 - 为什么这有效?

标签 java file groovy replace javax.imageio

我有一些 JPG 文件需要在运行时替换为 JFIF 标准化版本(我们使用的供应商为我们提供的 JPG 没有正确的 header ,因此它们在某些应用程序中不起作用)。 .我可以从现有图像创建一个新文件,然后从该文件获取缓冲图像并将内容直接写回到文件中,而无需删除它并且它可以工作...

imageSrcFolder.eachFileMatch ( ~/.*\.jpg/, {
    BufferedImage bi = ImageIO.read( it )
    ImageIO.write( bi, "jpg", it )
});

我的问题是为什么?为什么文件的大小最终没有增加一倍?为什么我不必先删除它?为什么我能够将文件对象添加到现有文件中,然后将其视为全新文件?看来我认为的"file"并不是java中的File对象实际上是什么,否则根本不起作用。

我的代码完全按照我想要的方式执行,但我不相信它总是会......它看起来太简单了

最佳答案

ImageIO.write 的 JavaDoc包括这个短语:

Writes an image using an arbitrary ImageWriter that supports the given format to a File. If there is already a File present, its contents are discarded.

这是假设 it 是一个 File,因为您在读取和写入操作中都使用了它。

关于Java/Groovy 文件 IO 用图像文件自己的内容替换图像文件 - 为什么这有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2472595/

相关文章:

java - 了解在 Java 中创建新文件的确切方式

java - 注释元数据的 Groovy 字 rune 字?

java - 如何将 .java 文件及其 mysql 数据库转换为 .exe

java - java中一维和二维数组之间的比较

java - 如何使用 Grid 并行执行 cucumber 测试用例?

java - 在 VSCode 中使用 Formatter 写入文件

c - 验证输入文件的内容

java - 获取maven项目的所有依赖项

java - Gradle : Multiple subtasks share the same extension variable object

groovy - 在 Groovy 中查找字符是否为 ASCII 字符