1. 程式人生 > >android 中讀寫xml檔案時取得路徑的方法/data/sdcard/src

android 中讀寫xml檔案時取得路徑的方法/data/sdcard/src


 
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物件,如果該資料夾不存在則用指定名稱建立一個新的資料夾。