FIFTH DAY——ANDROID基础(数据存储与IO)

1.android系统架构:

  • Linux内核层:为各种硬件提供底层驱动
  • 系统运行层/C++系统框架层:提供主要特性支持,运行时库提供一些核心库
  • 应用框架层/JAVA系统框架层:提供构建程序可能用到的API
  • 应用层/android应用框架层:应用程序

Android数据存储——File存储
1.openFileOutput 和 openFileInput
FileInputStream openFileInput(String name)
FileOutputStream openFileOutput(String name,int mode)

程序打开的是应用程序的数据文件夹的文件,文件大小有限,毕竟手机内置的存储空间有限。
应用示例见下示例。

2.读写SD卡的文件
SD卡大大扩充了手机的存储能力。
使用步骤:

  • 调用Environment的getExternalStorageState()方法判断手机是否插入了SD卡,并且应用程序具有读写SD卡的权限。Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
  • 调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡目录。
  • 使用FileInputStream、FileOuputStream、FileReader或FileWriter读写SD卡里的文件。

注:

  • 手机已经插入SD卡
  • 清单文件申请权限,如下:

应用示例:

   <user-permission android:name="android.perssion.MOUNT_UNMOUNT_FILESYSTEMS"/>
   <user-permission android:name="android.perssion.WRITE_EXTERNAL_STORSGE"/>

 public class MainActivity extends AppCompatActivity {

    final String FILE_NAME = "test.bin";
    final String filename = "/test.bin";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //System.out.println(new StringBuilder("a").append("b").append("c").toString());

         Button read = (Button) findViewById(R.id.button1);
         Button write = (Button) findViewById(R.id.button2);
        final EditText editText1 = (EditText) findViewById(R.id.editText1);
        final EditText editText2 = (EditText) findViewById(R.id.editText2);

        write.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                write(editText1.getText().toString());
                editText1.setText("");
            }
        });

        read.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editText2.setText(read());
            }
        });


    }

    private String read() {

      /*  try {
            //打开文件输入流
            FileInputStream fis = openFileInput(FILE_NAME);
            byte[] buff = new byte[1024];
            int hasRead = 0;
            StringBuilder sb = new StringBuilder("");
            //读取文件内容
            while ((hasRead = fis.read(buff)) > 0) {
                sb.append(new String(buff, 0, hasRead));
            }
            //关闭文件流
            fis.close();
            return sb.toString();
        }*/
        try {
            //如果手机装入了SD卡,并且程序具有访问SD卡的权限
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                Log.i("read", "read: " + Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED));

                //获取SD卡对应得存储目录
                File sdCardDir = Environment.getExternalStorageDirectory();
                //获取指定文件对应的输入流
                FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + filename);
                //将指定输入流包装成BufferendReader
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                StringBuilder sb = new StringBuilder("");
                String line = null;
                //循环读取文件
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
                //关闭资源
                br.close();
                Log.i("read", "read: "+sb.toString());
                return sb.toString();

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private void write(String content) {

       /* try {
            //已追加方式打开文件输出流
            FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
            //将FileOutputStream包装成PrintStream
            PrintStream ps = new PrintStream(fos);
            //输出文件内容
            ps.println(content);
            //关闭文件输出流
            ps.close();
        }*/
        try {
            //如果手机装入了SD卡,并且程序具有访问SD卡的权限
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                Log.i("write", "write: " + Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED));

                //获取SD卡的目录
                File sdCardDir = Environment.getExternalStorageDirectory();
                File targetFile = new File(sdCardDir.getCanonicalPath() + filename);
                //以指定文件创建RandomAccessFile对象
                RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
                //将文件记录指针移动到最后
                raf.seek(targetFile.length());
                //输出文件内容
                raf.write(content.getBytes());
                //关闭RandomAccessFile
                raf.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值