Android的存储
仅供个人学习以备忘,如有帮助,不胜荣幸!!
内部存储空间
- RAM内存:运行内存
- ROM内存:存储内存
外部存储空间
- SD卡:类似于移动硬盘
- 2.2之前sd卡路径:sdcard
- 4.3之前sd卡路径:mnt/sdcard
- 4.3开始sd卡路径:storage/sdcard
这三个路径在写程序时都可以用
内部存储读写代码示例:
public class MainActivity extends AppCompatActivity {
private EditText et_name;
private EditText et_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取两个文本输入框
et_name = (EditText)findViewById(R.id.et_name);
et_password = (EditText)findViewById(R.id.et_pw);
//读取本地文件中的已保存用户名和密码数据
readAccount();
}
//创建读取本地帐户资料的方法
public void readAccount(){
//File file = new File("data/data/com.wangy.a02_/info.txt");与下一行代码功能相同
//File file = new File(getFilesDir(),"info.txt");通过getFilesDir()获取路径,并创建名为files的文件夹
//通过getCacheDir()获取路径,并创建名为cache的文件夹
File file = new File(getCacheDir(),"info.txt");
if(file.exists()) {
try {
FileInputStream fis = new FileInputStream(file);
//使用字节流读取
//fis.read();
//使用字符流读取数据
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
//读取txt文件里的用户名和密码
String text = br.readLine();
//以##为界限进行分割
String[] s = text.split("##");
et_name.setText(s[0]);
et_password.setText(s[1]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void login(View v){
String name = et_name.getText().toString();
String pass = et_password.getText().toString();
CheckBox cb = (CheckBox)findViewById(R.id.cb);
//判断选框是否被勾选
if(cb.isChecked()){
//data/data/com.wangy.a02_:内部存储空间的路径
//File file = new File("data/data/com.wangy.a02_/info.txt");
//为方便起见,也可以用Google提供的API getFilesDir()获取路径,会创建一个名为files的文件夹,会永久保存,
//返回路径为data/data/com.wangy.a02_files
//File file = new File(getFilesDir(),"info.txt");
//还可以用API名为getCacheDir(),将数据保存在名为cache的文件里,当设备内存不足时会被删除,其返回值为data/data/com.wangy.a02_cache
File file = new File(getCacheDir(),"info.txt");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
//将用户输入的文本保存到本地
fos.write((name + "##" + pass).getBytes());
//关闭数据流
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
System.out.println("登录成功");
}
}
界面代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wangy.a02_.MainActivity"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_name"
android:layout_above="@+id/et_pw"
android:hint="请输入用户名" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_pw"
android:layout_centerInParent="true"
android:inputType="textPassword"
android:hint="请输入密码" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/et_pw">
<CheckBox
android:id="@+id/cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住用户名和密码"
android:layout_centerVertical="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="登录"
android:onClick="login"/>
</RelativeLayout>
</RelativeLayout>
界面截图:
外部存储跟内部存储相同;不过存储路径改为sdcard/info.text