05 - 数据操作一:文件读写与XML解析、SharedPreferences

文件读写核心代码  保存路径为

private final class SaveButtonClickListener implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			EditText fileName = (EditText) findViewById(R.id.fileName);
			EditText fileContent = (EditText) findViewById(R.id.fileContent);
			String fileNameStr = fileName.getText().toString();
			String fileContentStr = fileContent.getText().toString();
			FilesService fileSer = new FilesService(getApplicationContext());
			try {
				fileSer.save(fileNameStr, fileContentStr);
				Toast.makeText(getApplicationContext(), R.string.saveSuccess, 2)
				.show();
			} catch (Exception e) {
				Toast.makeText(getApplicationContext(), R.string.saveFaile, 2)
				.show();
			}

		}

文件操作  String path = "/data/data/com.yza.app/files/t.txt";     “t.txt” 与fileNameStr 一样

getFilesDir() 获取当前应用files目录

getCacheDir() 获取当前应用cache目录


public class FilesService {
	private Context context;

	public FilesService(Context context) {
		super();
		this.context = context;
	}
 
	public void save(String fileNameStr, String fileContentStr)
			throws Exception {
		// 操作模式 MODE_PRIVATE 只能被本应用使用,且覆盖原内容 
		FileOutputStream fos = context.openFileOutput(fileNameStr,
				Context.MODE_PRIVATE);
		fos.write(fileContentStr.getBytes());
		fos.close();
	} 
	public String read(String fileNameStr) throws Exception {
		FileInputStream fis = context.openFileInput(fileNameStr);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = fis.read(buffer)) != -1) {
			baos.write(buffer, 0, len);
		}
		return new String(baos.toByteArray()); 
	} 
}

操作模式 MODE_PRIVATE 只能被本应用使用,且覆盖原内容

1.Context.MODE_PRIVATE = 0;//私有的,只能被创建这个文件的当前应用访问,若创建的文件已经存在,则会覆盖掉原来的文件
2.Context.MODE_APPEND = 32768;//若文件不存在也会创建,若文件存在则在文件的末尾进行追加内容,也是私有的
3.Context.MODE_WORLD_READABLE=1;//创建出来的文件可以被其他应用所读取
4.Context.MODE_WORLD_WRITEABLE=2//允许其他应用对其进行写入。
当然,这几种模式也可以混用,比如允许其他应用程序对该文件进行读写,则可以是
FileOutputStream outStream = this.openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);


该方式默认为覆盖原有的文件,即如果再次对该文件写入内容,则会覆盖掉itcast.txt的原有内容,如果想要实现追加并能被其他应用程序访问,则应该设置以下模式:
FileOutputStream outStream = this.openFileOutput("itcast.txt",Context.MODE_APPEND+Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);

文件保存到SDCard:

public void saveToSDCard(String fileName,String content)throws Exception{
		File file = new File(new File("/mnt/sdcard"),fileName);
		FileOutputStream fos = new FileOutputStream(file);
		fos.write(content.getBytes());
		fos.close();
	}


推荐使用API的路径:        File file =  new File(Environment.getExternalStorageDirectory(),fileName);

 <!-- sdcard 创建与删除的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- sdcard 存储权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

XML解析


解析的核心代码

public class PersonService {
	public static List<Person> getPersonList(InputStream xml) throws Exception {
		List<Person> plist = null;
		Person p = null;
		XmlPullParser pullParser = Xml.newPullParser();
		pullParser.setInput(xml, "UTF-8");// 设置要解析的XMl数据
		int event = pullParser.getEventType();
		Log.i("person", "进入解析");
		while (event != XmlPullParser.END_DOCUMENT) {
			switch (event) {
			case XmlPullParser.START_DOCUMENT:
				plist = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				if ("person".equals(pullParser.getName())) {
					p = new Person();
					p.setId(Integer.parseInt(pullParser.getAttributeValue(0)));
					
				}
				if ("name".equals(pullParser.getName())) {
					p.setName(pullParser.nextText());
				}
				if ("age".equals(pullParser.getName())) {
					p.setAge(Integer.parseInt(pullParser.nextText()));
				}
				break;
			case XmlPullParser.END_TAG:
				if ("person".equals(pullParser.getName())) {
					plist.add(p);
					p = null;
				}
				break;
			}
			event = pullParser.next();
		}

		return plist;

	}
}

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="22">
		<name>zhangsan</name>
		<age>20</age>
	</person>
	<person  id="24">
		<name>lisi</name>
		<age>15</age>
	</person>
</persons>

public void testA() throws Exception {
		Log.i("person", "PersonService");
		InputStream xml = this.getClass().getClassLoader()
				.getResourceAsStream("person.xml"); 
		Log.i("person", "12"+(xml==null));
		List<Person> l = PersonService.getPersonList(xml);
		for (Person p : l) {
			Log.i("person", p.getName());
		} 
	}


保存


public void saveXML(List<Person> list, OutputStream out) throws Exception {
		XmlSerializer xs = Xml.newSerializer();
		xs.setOutput(out, "UTF-8");
		xs.startDocument("UTF-8", true);
		xs.startTag(null, "persons");  //不需要命名空间
		for (Person p : list) {
			xs.startTag(null, "person");
			xs.attribute(null, "id", p.getId().toString()); 
			xs.startTag(null, "name");
			xs.text(p.getName());
			xs.endTag(null, "name"); 
			xs.startTag(null, "age");
			xs.text(p.getAge().toString());
			xs.endTag(null, "age"); 
			xs.endTag(null, "person");
		} 
		xs.endTag(null, "persons"); 
		xs.endDocument(); 
		out.flush();
		out.close();
	}

SharedPreferences

public class ShareprefarActivity extends Activity {
	private EditText name;
	private EditText age;
	private PreferencesService ps;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		name = (EditText) this.findViewById(R.id.nameText);		
		age = (EditText) this.findViewById(R.id.ageText);
		ps= new PreferencesService(getApplicationContext());
		Map<String, String> map =ps.read();
		name.setText(map.get("name"));
		age.setText(map.get("age"));
	}

	public void save(View v){
    	 System.out.println(ps==null);
    	 System.out.println(age.getText().toString());
    	 System.out.println(age.getText().toString());
    	ps.save(name.getText().toString(),Integer.valueOf(age.getText().toString()));
    	Toast.makeText (getApplicationContext(), "成功保存", 1).show();
    }
}


public class PreferencesService {
	private Context context;

	public PreferencesService(Context context) {
		this.context = context;
	}

	public void save(String name, Integer age) {
		SharedPreferences pre = context.getSharedPreferences("yza",
				Context.MODE_PRIVATE);// 默认后缀xml yza.xml
		Editor edit = pre.edit();
		edit.putString("name", name);
		edit.putInt("age", age);
		edit.commit();
	}

	// 获取参数
	public Map<String, String> read() {
		Map<String, String> map = new HashMap<String, String>();
		SharedPreferences pre = context.getSharedPreferences("yza",
				Context.MODE_PRIVATE);// 默认后缀xml yza.xml
		map.put("name", pre.getString("name", ""));
		map.put("age", String.valueOf(pre.getInt("age", 0)));
		return map;

	}
}





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值