Created
November 14, 2015 12:50
-
-
Save robinvanyang/8aeab5becc9a400f8ab4 to your computer and use it in GitHub Desktop.
apple plist转换类
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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