2010-07-24 92 views

回答

4

PList職業從code.google.com/xmlwise看起來更有希望給我。

+0

如果你不想使用第三方庫,請參閱我的答案:http://stackoverflow.com/a/11619384/974531 – 2013-04-04 08:26:28

1

Here您可以非常容易地找到用於創建PList的PList類。

2

您不需要任何外部Java庫。使用以下步驟:

  1. 創建一個空的獨立DOM文檔。

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    DOMImplementation di = builder.getDOMImplementation(); 
    DocumentType dt = di.createDocumentType("plist", 
        "-//Apple//DTD PLIST 1.0//EN", 
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd"); 
    Document doc = di.createDocument("", "plist", dt); 
    doc.setXmlStandalone(true); 
    
  2. 設置plist版本。

    Element root = doc.getDocumentElement(); 
    root.setAttribute("version", "1.0"); 
    
  3. 輸入數據。

    Element rootDict = doc.createElement("dict"); 
    root.appendChild(rootDict); 
    Element sampleKey = doc.createElement("key"); 
    sampleKey.setTextContent("foo"); 
    rootDict.appendChild(sampleKey); 
    Element sampleValue = doc.createElement("string"); 
    sampleValue.setTextContent("bar"); 
    rootDict.appendChild(sampleValue); 
    
  4. 創建一個變壓器。

    DOMSource domSource = new DOMSource(doc); 
    TransformerFactory tf = TransformerFactory.newInstance(); 
    Transformer t = tf.newTransformer(); 
    t.setOutputProperty(OutputKeys.ENCODING, "UTF-16"); 
    t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, dt.getPublicId()); 
    t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dt.getSystemId()); 
    t.setOutputProperty(OutputKeys.INDENT, "yes"); 
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
    
  5. 寫入文件。

    StringWriter stringWriter = new StringWriter(); 
    StreamResult streamResult = new StreamResult(stringWriter); 
    t.transform(domSource, streamResult); 
    String xml = stringWriter.toString(); 
    System.out.println(xml); // Optionally output to standard output. 
    OutputStream stream = new FileOutputStream("example.plist"); 
    Writer writer = new OutputStreamWriter(stream, "UTF-16"); 
    writer.write(xml); 
    writer.close(); 
    

Property List Programming Guide描述然後可以讀在Objective-C這樣的文件。

0

對於簡單的情況,現有的答案看起來很複雜。這裏是一個限制較短的版本:

import java.io.File; 
import java.io.IOException; 
import java.util.Map; 
import java.util.Map.Entry; 

import org.apache.commons.io.FileUtils; 


public class PList { 

    public static String toPlist(Map<String,String> map) { 
     String s = ""; 
     s += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
     s += "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"; 
     s += "<plist version=\"1.0\">\n"; 
     s += "<dict>\n"; 

     for(Entry<String,String> entry : map.entrySet()) { 
      s += " <key>" + entry.getKey() + "</key>\n"; 
      s += " <string>" + entry.getValue() + "</string>\n"; 
     } 

     s += "</dict>\n"; 
     s += "</plist>\n"; 
     return s; 
    } 

    public static void writePlistToFile(Map<String,String> map, File f) throws IOException { 
     FileUtils.writeStringToFile(f, toPlist(map), "utf-8"); 
    } 

}