我有一个writeScore.class
正在执行以下操作:
- 获取相对文件的 URL 和 InputStream
score.xml
- 通过解析现有文件开始构建新的 xml 文档
- 将新记录附加到文档生成器
程序做的最后一件事应该是在旧文档的位置写入新文档。可悲的是,我找不到任何方法来使用我已经拥有的相对路径。我尝试使用 useURLConnection
和 than .getOutputStream
,但protocol doesn't support output
出现错误。我还尝试OIUtils.copy(is, os)
将 InputStream 转换为 OutputStream 但虽然没有错误,但由于某种原因文件没有更改,并且最后修改日期指向我最后一次使用直接文件地址进行操作。(我进行了系统范围的搜索,以防在其他地方创建了新文件,但一无所获)。
下面是使用 URLConnection 方法的简化代码:
public class writeScore {
public writeScore(Score NewScore, Interface obj) {
try {
// prepare file path
URL scoreUrl = new URL("file","localhost","save/score.xml");
InputStream is = scoreUrl.openStream();
final URLConnection scoreCon = scoreUrl.openConnection();
final OutputStream os = scoreCon.getOutputStream();
// build the document
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(is);
// root element
Element root = doc.getDocumentElement();
Element rootElement = doc.getDocumentElement();
// add new save
/* removed for code cleaning */
// save source
DOMSource source = new DOMSource(doc);
// set up the transformer
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// add properties of the output file
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
// save the file
StreamResult result = new StreamResult(os);
transformer.transform(source, result);
} // and catch all the exceptions
}
}
如果需要,我也很乐意更改输入文件的方式,只要我可以有一个从“Java”是我的项目目录的相对Java/bin/game/writeScore.class
路径Java/save/score.xml
。而且一旦游戏被打包成 .jar 并且save
是该 jar 之外的文件夹。