android读写assets目录下面的资源文件(文件夹)

 Android除了提供/res目录存放资源文件外,在/assets目录也会提供存放资源文件,在/assets目录下面不会在R.java里面自动生成ID,所以读取assets目录下面的资源文件需要提供路径,我们可以通过AssetManager类来访问这些文件。打包到apk中


读取方法:

public static List readXML(Context context) {
		 try {
			InputStream inStream = context.getAssets().open("userxml.xml");
			XmlPullParser xmlPullParser = Xml.newPullParser();  
			xmlPullParser.setInput(inStream, "UTF-8");  
	        int eventType = xmlPullParser.getEventType();//产生第一个事件  		
			User currentUser = null;
			List mUserList = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
					case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
						mUserList = new ArrayList();
						break;
					case XmlPullParser.START_TAG://开始元素事件
						String tagName = xmlPullParser.getName();
						if (tagName.equalsIgnoreCase("user")) {
							currentUser= new User();
							currentUser.set_id(Integer.parseInt(xmlPullParser.getAttributeValue(null, "id")));
						} else if (currentUser != null) {
							if (tagName.equalsIgnoreCase("name")) {
								currentUser.setUsername(xmlPullParser.nextText());// 如果后面是Text元素,即返回它的值
							} else if (tagName.equalsIgnoreCase("mobilephone")) {
								currentUser.setMobilePhone(xmlPullParser.nextText());
							} else if(tagName.equalsIgnoreCase("officephone")) {
								currentUser.setOfficePhone(xmlPullParser.nextText());
							} else if(tagName.equalsIgnoreCase("pinyin")) {
								currentUser.setPinyin(xmlPullParser.nextText());
							}
						}
						break;
					case XmlPullParser.END_TAG://结束元素事件
						if (xmlPullParser.getName().equalsIgnoreCase("user") && currentUser != null) {
							currentUser.imageId = R.drawable.default_avatar;
							mUserList.add(currentUser);
							currentUser = null;
						}
						break;
				}
				eventType = xmlPullParser.next();
			}
			return mUserList;
		} catch(NumberFormatException e) {
	        e.printStackTrace();
	    } catch(IOException e) {
	        e.printStackTrace();
	    } catch(XmlPullParserException e) {
	    	e.printStackTrace();
	    }
		return null;
	}

InputStream inStream = context.getAssets().open("userxml.xml");

opne(String filepath)指文件的路径,比如:

android读写assets目录下面的资源文件(文件夹)_第1张图片


那么userxml数据被打包到手机哪里去了?

/data/data/com.MyContacts.contacts/databases/Contacts-journal

就是在Contacts-journal这个文件中看到了userxml.xml文件中的数据


Assets中文件时在APK文件里面,apk文件安装时是保存在data/app目录下,它没被解压,因此在文件系统中没有userxml这样的文件节点,只能通过AssetsManager访问的。
 
你可以把上面的输入流,写到SD某个文件中,再通过那个文件直接路径读取。


你可能感兴趣的:(Android)