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,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; } }