安卓内部存储就是将信息保存在一个文件中放入手机内部一个特定的目录下,特别要注意,这里的内部存储不是内存存储。内部存储是系统中一个很特殊的位置。
读取数据都是根据文件名称来执行
下面根据一个简单的Demo来学习下内部存储
一、先看下Demo布局
功能就是:
1、输入文件名 和文件内容点击保存 就将文件内容保存在该文件名下
2、输入文件名 点击打开,就在编辑框中显示该文件的内容
布局文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:gravity="center_horizontal" 7 > 8 <LinearLayout 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:orientation="horizontal"> 12 13 14 15 <EditText 16 android:id="@+id/edit_filename" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:hint="输入文件名" 20 /> 21 22 <Button 23 android:id="@+id/btn_open" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:text="打开" 27 /> 28 <Button 29 android:id="@+id/btn_save" 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:text="保存" 33 /> 34 </LinearLayout> 35 36 <EditText 37 android:layout_width="match_parent" 38 android:layout_height="0dp" 39 android:gravity="left|top" 40 android:layout_weight="1" 41 android:hint="文件内容" 42 android:id="@+id/edit_content" 43 44 /> 45 46 47 </LinearLayout>
二、代码
1 package com.xqx_sharedata; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.util.Arrays; 8 9 import android.app.Activity; 10 import android.app.AlertDialog; 11 import android.os.Bundle; 12 import android.view.View; 13 import android.view.View.OnClickListener; 14 import android.widget.ArrayAdapter; 15 import android.widget.Button; 16 import android.widget.EditText; 17 18 public class MainActivity extends Activity implements OnClickListener { 19 20 private Button btn_save; //保存按钮 21 private Button btn_open; //打开按钮 22 private EditText fileName; //文件名编辑框 23 private EditText content; //文件内容编辑框 24 @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 setContentView(R.layout.activity_main); 28 29 btn_open = (Button) findViewById(R.id.btn_open); 30 btn_save = (Button) findViewById(R.id.btn_save); 31 fileName = (EditText) findViewById(R.id.edit_filename); 32 content = (EditText) findViewById(R.id.edit_content); 33 34 //俩按钮设置点击事件 35 btn_open.setOnClickListener(this); 36 btn_save.setOnClickListener(this); 37 } 38 //保存内容到文件中 39 public void saveFile() 40 { 41 //保存的文件名,从编辑框得到 42 String str_filename = fileName.getText().toString().trim(); 43 //保存的内容,从编辑框得到 44 String str_filecontent = content.getText().toString().trim(); 45 //安卓给定的字节输出流 46 FileOutputStream fos = null; 47 //写 48 try { 49 //第一个参数是写入的文件名,第二个参数是内容形式, 50 fos = openFileOutput(str_filename, MODE_PRIVATE); 51 fos.write(str_filecontent.getBytes()); 52 53 } catch (FileNotFoundException e) { 54 // TODO Auto-generated catch block 55 e.printStackTrace(); 56 } catch (IOException e) { 57 // TODO Auto-generated catch block 58 e.printStackTrace(); 59 } 60 try { 61 fos.close(); 62 } catch (IOException e) { 63 // TODO Auto-generated catch block 64 e.printStackTrace(); 65 } 66 67 } 68 //读文件 69 public void readFile() throws IOException 70 { 71 //编辑框中得到要读取的文件名 72 String str_filename = fileName.getText().toString().trim(); 73 //读取文件 74 FileInputStream fis = openFileInput(str_filename); 75 byte arr[] = new byte[1024]; 76 int len=0; 77 while((len = fis.read(arr))!=-1) 78 { 79 //将读取的数据添加到文本内容编辑框中 80 content.append(new String(arr,0,len)); 81 } 82 fis.close(); 83 84 85 } 86 87 88 @Override 89 public void onClick(View v) { 90 // TODO Auto-generated method stub 91 switch (v.getId()) { 92 //打开文件 93 case R.id.btn_open: 94 try { 95 readFile(); 96 } catch (IOException e) { 97 // TODO Auto-generated catch block 98 e.printStackTrace(); 99 } 100 break; 101 //保存文件 102 case R.id.btn_save: 103 saveFile(); 104 break; 105 106 default: 107 break; 108 } 109 } 110 }
额外功能:
将手机内部存储的所有文件名称以对话框的形式显示出来
1 AlertDialog dialog ; 2 3 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1); 4 adapter.addAll(Arrays.asList(fileList())); 5 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 6 dialog = builder.setTitle("文件列表") 7 .setIcon(R.drawable.ic_launcher) 8 .setAdapter(adapter, null) 9 .setPositiveButton("确定", null) 10 .create(); 11 dialog.show();
三、内部存储存储的形式是以文件的形式
可以在File Explorer中 data/data/包名/中找到存储的文件
data/data/包名
files 里面的就是内 部存储保存的文件 图标右边的是文件名,时间左边的是文件大小
---------------------------------------------------------------------------------------------------------------------------------------
相关知识: