android 5.0 实现xml文件的解释,读写操作

前几天因需要实现多用户的功能,不同用户的配置信息保存到对应用户的目录下,故涉及到特定目录下的xml文件解释,读写操作的实现,

现把实现代码分享,供参考:

public class UsersUtil {
    
    private static final String TAG = "UsersUtil";
    /** preference for saving the current user info */
    private static final String PREFERENCE_CURRENT_USER = "current_user";
    private static final String DEFUALT_USER_XML = "users.xml";
    private static final String XML_DOC_TAG_USERS = "users";
    private static final String XML_DOC_TAG_USER = "user";
    private static final String XML_DOC_TAG_NAME = "name";
    private static final String XML_DOC_TAG_PW = "password";
    private static final String XML_DOC_TAG_ATTRIBUTE_ID = "id";

    public static final String SEED_AES = "238990341234";
    public static final String PATH_USER_INFO_DIRECTORY = "/data/xxx/";
    
    /** the max length of the finger name and user name
     *  because the user name is used for create the userInfo folder
     *  so can't be too long*/
    public static final int MAX_NAME_LENGTH = 10;
    public static final int MAX_USERS = 100;
    
    public static final char[] NAME_ENABLE_CHARS = { '1', '2', '3', '4', '5', '6',
            '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
            'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
            'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
            'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
            'W', 'X', 'Y', 'Z', '-', '_', ':' };
    
    private static ArrayList
   
   
    
     userList = null;
    private static Context mContext;

    public static void init(Context context) {
        mContext = context;
        if (userList == null) {
            userList = new ArrayList
    
    
     
     ();
        }
        userList.clear();
        boolean result = initDataFile();
        Log.i(DataUtil.TAG_LOG, TAG + " init, pathPrefix: "
                + PATH_USER_INFO_DIRECTORY + ", initDataFile result: " + result);
        try {
            parseXmlFromLocal(PATH_USER_INFO_DIRECTORY
                    + DEFUALT_USER_XML);
        } catch (Exception e) {
            // e.printStackTrace();
            Log.e(DataUtil.TAG_LOG, TAG + " init user error, " + e);
        }
        // if not exist any user info, initialize one
        if (userList.size() == 0) {
            UserInfo user = new UserInfo();
            user.setId(0);
            user.setName("Default");
            String pw = "qqqq";
            try {
                pw = AESEncryptor.encrypt(SEED_AES, pw);
            } catch (Exception e) {
                // e.printStackTrace();
                Log.e(DataUtil.TAG_LOG, TAG + " init user, "
                        + "password encrypt failed, " + e);
            }
            user.setPassword(pw);
            userList.add(user);
            // save the user info into XML
            saveUserInfoToXml(mContext, userList);
        }
        initCurrentUser();
    }

    public static boolean saveUserInfoToXml(Context context,
            ArrayList
     
     
      
       userList) {
        File file = new File(PATH_USER_INFO_DIRECTORY + DEFUALT_USER_XML);
        if (!file.exists()) {
            boolean result = initDataFile();
            if (!result) {
                Log.e(DataUtil.TAG_LOG, TAG + " saveUserInfoToXml, "
                        + "File create failed.");
            }
        }
        OutputStream out = null;
        try {
            out = new FileOutputStream(file);
            // out = context.openFileOutput(PATH_USER_INFO_DIRECTORY
            // + DEFUALT_USER_XML, Context.MODE_PRIVATE);
            // OutputStreamWriter outw = new OutputStreamWriter(out);
            return writeDataToXml(userList, out);
        } catch (FileNotFoundException e) {
            // e.printStackTrace();
            Log.e(DataUtil.TAG_LOG, TAG + " saveUserInfoToXml, "
                    + "FileNotFoundException, " + e);
            return false;
        } catch (Exception e) {
            // e.printStackTrace();
            Log.e(DataUtil.TAG_LOG, TAG + " saveUserInfoToXml, "
                    + "occurs error, " + e);
            return false;
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static ArrayList
      
      
       
        getUserList() {
        return userList;
    }

    private static void initCurrentUser() {
        FpControllerNative controllerNative = FpControllerNative.getInstance();
        controllerNative.initFPSystem();
        SLFpsvcIndex fpsvcIndex = controllerNative.GetFpInfo();
        int currentUserID = fpsvcIndex.userid;
        Log.e(DataUtil.TAG_LOG, TAG + " initCurrentUser, currentUserID: "
                + currentUserID);
        for (UserInfo user : userList) {
            if (user.getId() == currentUserID) {
                setCurrentUser(mContext, user);
            }
        }
        controllerNative.destroyFPSystem();
    }
    
    private static boolean initDataFile() {
        File file = new File(PATH_USER_INFO_DIRECTORY + DEFUALT_USER_XML);
        if (!file.exists()) {
            try {
                File parentDirectory = file.getParentFile();
                if (parentDirectory != null && !parentDirectory.exists()) {
                    parentDirectory.mkdirs();
                }
                return file.createNewFile();
            } catch (IOException e) {
                // e.printStackTrace();
                Log.e(DataUtil.TAG_LOG, TAG + " initDataFile, "
                        + "File create failed, " + e);
            }
            return false;
        }
        return true;
    }
    
    private static List
       
       
         parseXmlFromLocal(String filePath) throws Exception { File file = new File(filePath); if (!file.exists()) { Log.e(DataUtil.TAG_LOG, TAG + " parseXmlFromLocal file not exists"); return null; } FileInputStream fis = new FileInputStream(file); XmlPullParser parser = Xml.newPullParser(); parser.setInput(fis, "UTF-8"); int eventType = parser.getEventType(); UserInfo user = null; while (eventType != XmlPullParser.END_DOCUMENT) { String tagName = parser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if (XML_DOC_TAG_USERS.equals(tagName)) { // userList = new ArrayList 
        
          (); } else if (XML_DOC_TAG_USER.equals(tagName)) { user = new UserInfo(); String id = parser.getAttributeValue(null, XML_DOC_TAG_ATTRIBUTE_ID); user.setId(Integer.valueOf(id)); } else if (XML_DOC_TAG_NAME.equals(tagName)) { String text = parser.nextText(); user.setName(text); } else if (XML_DOC_TAG_PW.equals(tagName)) { String text = parser.nextText(); user.setPassword(text); } break; case XmlPullParser.END_TAG: if (XML_DOC_TAG_USER.equals(tagName)) { if (userList.size() < MAX_USERS) { userList.add(user); } else { Log.e(DataUtil.TAG_LOG, TAG + " parseXmlFromLocal" + " userList reach the max size."); } } break; default: break; } eventType = parser.next(); } fis.close(); return userList; } private static boolean writeDataToXml(ArrayList 
         
           userList, OutputStream out) { if (userList == null || userList.size() == 0) { Log.e(DataUtil.TAG_LOG, TAG + " writeDataToXml userList is empty"); return false; } try { String enter = System.getProperty("line.separator"); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(out, "UTF-8"); serializer.startDocument("UTF-8", true); // add the line separator serializer.text(enter); serializer.startTag(null, XML_DOC_TAG_USERS); // add the line separator serializer.text(enter); for (UserInfo user : userList) { serializer.startTag(null, XML_DOC_TAG_USER); serializer.attribute(null, XML_DOC_TAG_ATTRIBUTE_ID, user.getId() .toString()); // add the line separator serializer.text(enter); serializer.startTag(null, XML_DOC_TAG_NAME); serializer.text(user.getName().toString()); serializer.endTag(null, XML_DOC_TAG_NAME); // add the line separator serializer.text(enter); serializer.startTag(null, XML_DOC_TAG_PW); serializer.text(user.getPassword()); serializer.endTag(null, XML_DOC_TAG_PW); // add the line separator serializer.text(enter); serializer.endTag(null, XML_DOC_TAG_USER); // add the line separator serializer.text(enter); } serializer.endTag(null, XML_DOC_TAG_USERS); serializer.endDocument(); out.flush(); out.close(); return true; } catch (Exception e) { Log.e(DataUtil.TAG_LOG, TAG + " writeDataToXml occurs exception, " + e); return false; } } public static UserInfo getCurrentUser(Context context) { SharedPreferences sp = context.getSharedPreferences( PREFERENCE_CURRENT_USER, Activity.MODE_PRIVATE); String id = sp.getString(XML_DOC_TAG_ATTRIBUTE_ID, ""); String name = sp.getString(XML_DOC_TAG_NAME, ""); String pw = sp.getString(XML_DOC_TAG_PW, ""); if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name)) { return userList.get(0); } UserInfo user = new UserInfo(); user.setId(Integer.valueOf(id)); user.setName(name); user.setPassword(pw); return user; } public static boolean setCurrentUser(Context context, UserInfo user) { Log.i(DataUtil.TAG_LOG, TAG + " setCurrentUser userInfo: " + user.toString()); SharedPreferences sp = context.getSharedPreferences( PREFERENCE_CURRENT_USER, Activity.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); String id = user.getId().toString(); String name = user.getName(); String pw = user.getPassword(); editor.putString(XML_DOC_TAG_ATTRIBUTE_ID, id); editor.putString(XML_DOC_TAG_NAME, name); editor.putString(XML_DOC_TAG_PW, pw); return editor.commit(); } /** * 循环删除对应目录,及该目录下的文件数据 */ public static boolean recursionDeleteFile(File file) { if (file == null) { Log.e(DataUtil.TAG_LOG, TAG + " recursionDeleteFile file is null"); return false; } if (file.isDirectory()) { File[] childFiles = file.listFiles(); if (childFiles == null || childFiles.length == 0) { Log.i(DataUtil.TAG_LOG, TAG + " recursionDeleteFile directoryName: " + file.getName()); return file.delete(); } for (File f : childFiles) { recursionDeleteFile(f); } Log.i(DataUtil.TAG_LOG, TAG + " recursionDeleteFile directoryName: " + file.getName()); return file.delete(); } else { if (file.exists()) { Log.i(DataUtil.TAG_LOG, TAG + " recursionDeleteFile fileName: " + file.getName()); return file.delete(); } else { Log.i(DataUtil.TAG_LOG, TAG + " recursionDeleteFile fileName: " + file.getName() + " not exists"); return false; } } } } 
          
         
       
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值