android 中讀寫xml檔案時取得路徑的方法/data/sdcard/src
阿新 • • 發佈:2019-01-01
package com.eboy.readwritexml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import com.eboy.domain.Person; import com.eboy.readwritexml.R; import com.eboy.service.PersonService; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { Button btn1; Button btn2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.button1);// read btn2 = (Button) findViewById(R.id.button2);// write btn1.setOnClickListener(listener); btn2.setOnClickListener(writeListener); } //寫入按鈕的監聽 View.OnClickListener writeListener = new OnClickListener() { public void onClick(View paramView) { // TODO Auto-generated method stub List<Person> persons = new ArrayList<Person>(); persons.add(new Person(11, "aaa", 25)); persons.add(new Person(22, "bbb", 35)); persons.add(new Person(33, "ccc", 45)); //往data/data/本工程/files/person1.xml中寫入的路徑 // File xmlFile = new File(MainActivity.this.getFilesDir(), "/person1.xml"); // System.out.println("路徑為:"+MainActivity.this.getFilesDir()+"/person1.xml"); //向sdcard中寫入的路徑 //在往sdcard中寫入檔案時,在manifest.xml中加一個許可權 //<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> String file_path = File.separator + "sdcard" + File.separator + "aaa.xml"; File xmlFile = new File(file_path); try { FileOutputStream outStream = new FileOutputStream(xmlFile); PersonService.save(persons, outStream); System.out.println("寫入成功"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; //讀取的監聽 View.OnClickListener listener = new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub //讀取sdcard中內容的路徑 String file_path = File.separator + "sdcard" + File.separator + "aaa.xml"; InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(file_path); //讀取本工程下面的src資料夾下的person.xml檔案 // InputStream inputStream = getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons; try { //讀取/data/data/youPackageName/files的person1.xml檔案 //開啟/data/data/youPackageName/files的File。返回的是inputStream或者outputStream //InputStream inputStream = MainActivity.this.openFileInput("person1.xml"); persons = PersonService.getPersons(inputStream); for (Person person : persons) { Toast.makeText(getApplicationContext(), person.toString(), Toast.LENGTH_SHORT).show(); System.out.println("22222"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
參考自:http://blog.csdn.net/vvqiu/article/details/8551036
內部儲存路徑為/data/data/youPackageName/,下面講解的各路徑都是基於你自己的應用的內部儲存路徑下。所有內部儲存中儲存的檔案在使用者解除安裝應用的時候會被刪除。
一、 files
1. Context.getFilesDir(),該方法返回/data/data/youPackageName/files的File物件。
2. Context.openFileInput()與Context.openFileOutput(),只能讀取和寫入files下的檔案,返回的是FileInputStream和FileOutputStream物件。
3. Context.fileList(),返回files下所有的檔名,返回的是String[]物件。
4. Context.deleteFile(String),刪除files下指定名稱的檔案。
二、cache
1. Context.getCacheDir(),該方法返回/data/data/youPackageName/cache的File物件。
三、custom dir
getDir(String name, int mode),返回/data/data/youPackageName/下的指定名稱的資料夾File物件,如果該資料夾不存在則用指定名稱建立一個新的資料夾。