我一直在为一个命令行程序编写一个GUI包装器(在Java中),该程序生成一个文件名下的SVG图像。
不幸的是,底层程序在生成新图像时无法关闭svg标记,所以我使用像这样的FileWriter来修改文件:
FileWriter fw = new FileWriter(("ImageCache/"+file), true); //true: allows appending to file
BufferedWriter bw = new BufferedWriter(fw);
bw.write("\n</svg>");
bw.close();
fw.close();
Batik完美地转码第一张图片,但第二张图片由于缺少svg标签而失败。
我已经手动检查以验证FileWriter是否正在更新文件,它就是这样。
下面是我的代码转换器代码(带有输入文件和newFileName):
org.apache.batik.ext.awt.image.spi.ImageTagRegistry.getRegistry().flushCache();
PNGTranscoder t = new PNGTranscoder();
String svgURI = new File(file).toURL().toString();
TranscoderInput i = new TranscoderInput(svgURI);
OutputStream outStream = new FileOutputStream(newFileName);
TranscoderOutput o = new TranscoderOutput(outStream);
t.transcode(i, o);
outStream.flush();
outStream.close();
每次生成更新的SVG图像时,都会实例化一个新的转码器对象并运行上述方法。
在代码转换器运行之前总是生成图像并添加结束标记,因此我不知道为什么代码转换器似乎没有读取更新的文件。我也尝试暂停线程几秒钟,没有任何改进。
任何建议都将不胜感激。