Skip to content

Instantly share code, notes, and snippets.

@robinvanyang
Created November 14, 2015 12:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robinvanyang/8aeab5becc9a400f8ab4 to your computer and use it in GitHub Desktop.
Save robinvanyang/8aeab5becc9a400f8ab4 to your computer and use it in GitHub Desktop.
apple plist转换类
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* apple plist转换类
* Created By: Robin Yang
* Created At: 2015-09-15/9/16 03:49
*/
public class PListParser {
public static String parsePListToJsonString(String targetFile) {
String result = "";
try {
result = parsePListToJsonString(new FileInputStream(targetFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return result;
}
public static String parsePListStringToJsonString(String plistString) {
InputStream is = new ByteArrayInputStream(plistString.getBytes());
return parsePListToJsonString(is);
}
public static String parsePListToJsonString(InputStream is) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
HashMap<String, String> replacements = new HashMap<String, String>() {{
put("<dict>", "{");
put("<key>", "\"");
put("<string>", "\"");
put("<integer>", "");
put("<array>", "[");
put("<real>", "");
put("</dict>", "},");
put("</key>", "\":");
put("</string>", "\",");
put("</integer>", ",");
put("</array>", "],");
put("</real>", ",");
put("<true/>", "true,");
put("<false/>", "false,");
put("\n", "");
put("\t", "");
}};
String regexp = "<dict>|<key>|<string>|<integer>|<array>|<real>|</dict>|</key>|</string>|</integer>|</array>|</real>|<true/>|<false/>|\n|\t";
Pattern p = Pattern.compile(regexp);
for (String line = br.readLine(); line != null; line = br.readLine()) {
Matcher m = p.matcher(line);
String resultLine = parsePlistLine(line, replacements, m);
// if (null != resultLine && !resultLine.isEmpty()) {
if (!TextUtils.isEmpty(resultLine)) {
if (sb.lastIndexOf(",") == sb.length() - 1 && resultLine.startsWith("},") || resultLine.startsWith("],"))
sb.deleteCharAt(sb.length() - 1);
sb.append(resultLine);
}
}
if (sb.length() > 0 && (sb.lastIndexOf(",") == sb.length() - 1))
sb.deleteCharAt(sb.length() - 1);
br.close();
} catch (Exception e) {
System.err.println("Error: Target File Cannot Be Read");
}
return sb.toString();
}
private static String parsePlistLine(String line, HashMap<String, String> replacements, Matcher m) {
if (line.startsWith("<?xml") || line.startsWith("<!DOCTYPE") || line.startsWith("<plist") || line.startsWith("</plist>"))
return null;
else {
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb, replacements.get(m.group()));
m.appendTail(sb);
return sb.toString();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment