0

我试图在更改文件质量后替换文件 - 问题是我只能创建一个新文件,而不是替换原始文件。这是我正在使用的代码:

private static void resize(String folder, String filename)
        throws IOException {

    BufferedImage imagem = ImageIO.read(new File(folder + "/" + filename));

    float quality = (float) 0.25;

    ImageWriter writer = (ImageWriter) ImageIO.getImageWritersByFormatName(
            "jpeg").next();
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    iwp.setCompressionQuality(quality);
    File file = new File(folder + "/" + filename);
    FileImageOutputStream output = new FileImageOutputStream(file);
    writer.setOutput(output);
    IIOImage image = new IIOImage(imagem, null, null);
    writer.write(null, image, iwp);
    writer.dispose();
}
4

2 回答 2

1

对我来说,它没有截断文件,所以旧文件的内容在新数据之后仍然存在。您必须确保在手动清空文件之前。

我是这样做的:

        try (FileOutputStream faos = new FileOutputStream(file)) {
            try (BufferedOutputStream bos = new BufferedOutputStream(faos)) {
                try (ImageOutputStream fios = ImageIO.createImageOutputStream(bos)) {
                    writer.setOutput(fios);
                    writer.write(null, new IIOImage(image, null, null), iwp);
                }
            }
        }
于 2020-05-25T15:51:48.200 回答
0

在我的计算机(使用 Java 7)中,它可以很好地替换原始文件。检查文件是否具有正确的写入权限

于 2013-05-28T22:33:05.040 回答