[Android學習]Android資料的四種儲存方式(2)--File

來源:互聯網
上載者:User

File:即常說的檔案(I/O)儲存方式,常用儲存大量的資料,但缺點就是更新資料將是一件困難的事情。

下面的程式簡單示範了如何讀寫應用資料檔案夾中的檔案。該程式的介面同樣簡單,只包含了兩個文本輸入框和兩個按鈕:其中第一組文字框和按鈕用於處理輸入;第二組文字框用於資料處理。其具體代碼如下:

 

package com.ye_yun_lin.filetest;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import javax.security.auth.PrivateCredentialPermission;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {final String FILE_NAME = "MyData";private EditText editText1;private EditText editText2;private Button button1;private Button button2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText1=(EditText)findViewById(R.id.edittext1);button1=(Button)findViewById(R.id.button1);editText2=(EditText)findViewById(R.id.edittext2);button2=(Button)findViewById(R.id.button2);button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {write(editText1.getText().toString());editText1.setText("");}});button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {editText2.setText(read());}});}private String read(){try {FileInputStream fileInputStream=openFileInput(FILE_NAME);byte[] buff=new byte[1024];int hasRead=0;StringBuilder sBuilder=new StringBuilder("");while ((hasRead=fileInputStream.read(buff))>0) {sBuilder.append(new String(buff,0,hasRead));}fileInputStream.close();return sBuilder.toString();} catch (Exception e) {e.printStackTrace();}return null;}private void write(String content){try {FileOutputStream fileOutputStream=openFileOutput(FILE_NAME, MODE_APPEND);PrintStream printStream=new PrintStream(fileOutputStream);printStream.println(content);printStream.close();} catch (Exception e) {e.printStackTrace();}}}


 

 

執行個體:SD卡檔案瀏覽器:

當程式啟動時,系統擷取/mnt/sdcard目錄下的全部檔案、檔案夾,並使用ListView將他們顯示出來;當使用者單擊ListView的指定列表時,系統將會顯示該列表下全部檔案夾和檔案。

該程式的介面布局檔案如下:

 

            

主代碼:

 

 

package com.ye_yun_lin.sdcard;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private TextView textView;private ListView listView;private Button button;private File currentParent;private File[] currentFiles;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=(TextView)findViewById(R.id.path);listView=(ListView)findViewById(R.id.list);button=(Button)findViewById(R.id.parent);File root=new File("/mnt/sdcard/");if(root.exists()){currentParent=root;currentFiles=root.listFiles();inflateListView(currentFiles);}listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView parent, View view, int position,long id) {if(currentFiles[position].isFile())return;File[] tmp=currentFiles[position].listFiles();if(tmp==null || tmp.length==0){Toast.makeText(MainActivity.this, "當前路徑不可訪問或該路徑下沒有檔案", Toast.LENGTH_SHORT);}else{currentParent=currentFiles[position];currentFiles=tmp;inflateListView(currentFiles);}}});button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) {currentParent=currentParent.getParentFile();currentFiles=currentParent.listFiles();inflateListView(currentFiles);}} catch (IOException e) {e.printStackTrace();}}});}private void inflateListView(File[] files){List> listItemsListView=new ArrayList>();for(int i=0;i listItemMap=new HashMap();if(files[i].isDirectory()){listItemMap.put("icon", R.drawable.folder);}else{listItemMap.put("icon", R.drawable.file);}listItemMap.put("fileName", files[i].getName());listItemsListView.add(listItemMap);}SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItemsListView,R.layout.line,new String[]{"icon","fileName"},new int[]{R.id.icon,R.id.file_name});listView.setAdapter(simpleAdapter);try {textView.setText("當前路徑為:"+currentParent.getCanonicalPath());} catch (IOException e) {e.printStackTrace();}}}


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.