我正在尝试在更改文件质量后替换文件 - 问题是我只能创建一个新文件,而不是替换原始文件。这是我正在使用的代码:
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();
}
答案 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);
}
}
}