安卓 Java:创建一个KML文件并在现有文件中插入元素
我正在开发一个应用程序,可以读取照片的GPS Exif信息并写入标签(Lat/Lon,…)在KML或CSV文件中。 如果文件不存在,尤其是csv,则创建这些文件不是问题,但在本例中,我想向现有KML文件添加一个新的KML-placemark
到目前为止,我已经创建了一个方法来检查文件是否已经存在——如果不存在(if语句),它将创建一个新的文件。 如果文件存在,则应添加信息(否则)
public void createKMLFile(){
String kmlstart = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n";
String kmlelement ="\t<Placemark>\n" +
"\t<name>Simple placemark</name>\n" +
"\t<description>"+name+"</description>\n" +
"\t<Point>\n" +
"\t\t<coordinates>"+latlon[1]+","+latlon[0]+","+z+ "</coordinates>\n" +
"\t</Point>\n" +
"\t</Placemark>\n";
String kmlend = "</kml>";
ArrayList<String> content = new ArrayList<String>();
//content.add(0,kmlstart);
//content.add(1,kmlelement);
//content.add(2,kmlend);
String kmltest;
//Zum Einsetzen eines Substrings (weitere Placemark)
//String test = "</kml>";
//int index = kml.lastIndexOf(test);
File test = new File(datapath+"/"+name+".kml");
Writer fwriter;
if(test.exists() == false){
try {
content.add(0,kmlstart);
content.add(1,kmlelement);
content.add(2,kmlend);
kmltest = content.get(0) + content.get(1) + content.get(2);
fwriter = new FileWriter(datapath+"/"+name+".kml");
fwriter.write(kmltest);
//fwriter.append("HalloHallo", index, kml.length());
fwriter.flush();
fwriter.close();
}catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else{
kmltest = content.get(0) + content.get(1) + content.get(2);
StringTokenizer tokenize = new StringTokenizer(kmltest, ">");
ArrayList<String> append = new ArrayList<String>();
while(tokenize.hasMoreTokens()){
append.add(tokenize.nextToken());
append.add(1, kmlelement);
String rewrite = append.toString();
try {
fwriter = new FileWriter(datapath+"/"+name+".kml");
fwriter.write(rewrite);
fwriter.flush();
fwriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我在LogCat中没有任何日志,但如果我尝试更新现有文件,应用程序将停止工作。。。有什么建议吗? 提前谢谢
编辑:好的,我看到了内容。添加(0,kml…)必须在试用区之外。。。但这似乎不是主要问题
# 1 楼答案
修改XML文件时,最好使用某种库来完成。我维护XML-manipulation library called JDOM,它旨在使这种操作尽可能容易。其他选项包括使用the DOM library(它已经内置在Java运行时中,可以更容易地集成到您的程序中),and SAX(在本例中,我不建议使用,尽管它可能更快)。其他的外部库(比如JDOM)也会有帮助,比如XOM、dom4j等。这个stackoverflow答案似乎是相关的:Best XML parser for Java
在JDOM中,您的代码看起来像:
编辑:你问你的实际代码出了什么问题。。。。有几件事会导致你的问题,但你没有显示出实际的错误,或者程序如何“停止工作”的其他迹象
kmltest = content.get(0) + content.get(1) + content.get(2);
应该引发IndexOutOfBoundsException,因为内容ArrayList是空的(向ArrayList添加值的行被注释掉了…)-但我们假设他们不是李>">"
,这从来不是解析XML的好方法李># 2 楼答案
它现在正在工作,感谢您的输入! 在我的程序中,我已经用JDOM库实现了这个方法,它更舒适,不管怎样,如果有人感兴趣,这里是我第一次尝试的工作代码。 输出的格式不太好,但kml文件正在工作