Android开发笔记之文件访问
之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式。文件可以是在应用打包时预置,也可以是应用所生成。
文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存。二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式。
res/raw/下静态文件的读取
在res/raw下存放words.xml文件。XML文件其实可以通过Android开发笔记之资源resource(下)
中所放置在res/xml中。本例仅用此说明放置在res/raw中文件读取的方式。
1 | <code id= "code0" ><words> |
源代码如下:
01 | public class Chapter23Test1 extends ListActivity{ |
02 | private ArrayList<String> items = new ArrayList<String>(); |
04 | protected void onCreate(Bundle savedInstanceState) { |
05 | super .onCreate(savedInstanceState); |
08 | InputStream in = getResources().openRawResource(R.raw.words); |
10 | DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); |
11 | Document doc = builder.parse(in, null ); |
12 | NodeList words = doc.getElementsByTagName( "word" ); |
14 | for ( int i = 0 ; i < words.getLength(); i ++){ |
15 | Element node = (Element)words.item(i); |
16 | items.add(node.getAttribute( "value" );); |
19 | Toast.makeText( this , "Exception: " + t.toString(), Toast.LENGTH_LONG).show(); |
21 | setListAdapter( new ArrayAdapter<String>( this ,android.R.layout.simple_list_item_1,items)); |
应用私有文件读取
对于文件,更重要的是支持读写操作,Android提供在应用目录下的文件读写方式。下面是一个编辑器的例子,文件名称为notes.txt,位于应用文件目录:/data/data/com.wei.android.learning/files/目录下面。这个目录是应用缺省的私有文件夹。编辑器在应用关闭,至于后台的时候,讲文本框的内容保存至文件,当有效时,从文件中读取内容,恢复到编辑器中。也就是在onPause()时进行写操作,onResume()时进行读操作。第一次打开应用时,由于没有找到文件,会返回一个错误,籍此我们可以跟踪文件所在绝对路径。下面是源代码:
01 | public class Chapter23Test2 extends Activity{ |
02 | private EditText editor = null ; |
03 | private static String NOTES= "notes.txt" ; |
04 | protected void onCreate(Bundle savedInstanceState) { |
05 | super .onCreate(savedInstanceState); |
06 | setContentView(R.layout.chapter_23_test2); |
07 | editor = (EditText)findViewById(R.id.c23_editor); |
08 | Button button = (Button)findViewById(R.id.c23_close); |
09 | button.setOnClickListener( new View.OnClickListener() { |
10 | public void onClick(View v) { |
17 | protected void onResume() { |
42 | OutputStreamWriter out = new OutputStreamWriter(openFileOutput(NOTES, 0 )); |
43 | out.write(editor.getText().toString()); |
46 | Toast.makeText( this , "Exception: " + t.toString(), 5000 ).show(); |