Android:外部存储的读写

外部存储的读写就是对SD卡的读写,在内部存储空间中的读写是不需要权限的,而外部存储的读写中的写是需要权限的,读不需要权限。外部存储的读写操作方法与内部存储相同,只是路径不同。
Android 2.2之前 SD卡路径:scard
Android 4.3之前 SD卡路径 :mnt/scard
Android 4.3之后 SD卡路径 :storage/scard
写权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

代码(只是对内部存储的代码修改了路径):

package com.example.instorage;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
      private EditText et_username;
      private EditText et_password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.instorage);

        et_username=(EditText) findViewById(R.id.et_username);
        et_password=(EditText) findViewById(R.id.et_password);

        readAcount();

    }
    public void readAcount(){
         File file=new File("sdcard/info.txt");
         if(file.exists()){
         FileInputStream fis;
        try {
            fis = new FileInputStream(file);
            //把字节流转换为字符流
             BufferedReader br=new BufferedReader(new InputStreamReader(fis));
             //读取txt中的用户名和密码
             String line=br.readLine();
             String[] s=line.split("##");
             //ctrl+1可以直接将局部变量设置为全局变量
             et_username.setText(s[0]);
             et_password.setText(s[1]);


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         } 
    }
   public void login (View v){

       String name=et_username.getText().toString();
       String password=et_password.getText().toString();       


       CheckBox cb=(CheckBox) findViewById(R.id.cb);
       //判断选框有没有被勾选,调用isChecked()
       if(cb.isChecked()){
           //这就是内部存储空间的路径
           //先进行部署,之后通过 Window-show View-other-File Explorer-data/data下找到相应包名的文件
            //  File file=new File("sdcard/info.txt");在实际开发中一般使用下面语句
              File file=new File(Environment.getExternalStorageDirectory(),"/info.txt");
              FileOutputStream os;
            try {
                os = new FileOutputStream(file);
                String buffer=name+"##"+password;
                os.write(buffer.getBytes());
                os.close();//记得关闭文件               
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }             
           }
           Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();

   }


}

注意点:
对于file的获得可以有两种方式,但在实际开发中由于手机制造商随意改动Sd卡的目录结构,导致我们在开发过程中一般使用第二种方式进行开发。
File file=new File(“sdcard/info.txt”);//在实际开发中一般使用下面语句
File file=new file(Environment.getExternalStorageDirectory(),”/info.txt”);

你可能感兴趣的:(Android:外部存储的读写)