使用FileImageOutputStream替换现有文件

时间:2013-05-28 22:06:10

标签: java image io replace

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

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();
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我是这样做的:

        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);
                }
            }
        }