Android5中存储方式之文件外部存储SDCard存储

Android5中存储方式之文件外部存储SDCard存储
文件外部存储SDCard存储
特征:
1、存储类型也是任意的,文档、图片、音频、视频
2、存储位置:
路径1:/mnt/sdcard/文件
路径2:/mnt/sdcard/Android/data/应用的包名/文件

/storage/sdcard1/

3、适合存储 公开的数据

注意:
4、两种路径存储需要权限
write_external_storage
read_external_storage

5、两种路径必须保证sdcard是挂载的
提供了对应api 判断sdcard是否正常挂载
if(Enviroment.getExternalStorageState()==”mounted”}{
挂载
}

保存步骤:
1、获取 外部存储的路径 ★

路径一:
Environment.getExternalStorageDirectory()

路径二:
this.getExternalFilesDir(null);

2、创建输出流对象
3、写入
4、关闭流

读取步骤
1、获取 外部存储的路径

路径一:
Environment.getExternalStorageDirectory()

路径二:
this.getExternalFilesDir(null);

2、创建输入流对象
3、读取
4、关闭流

外部存储和内部储存方式的对比
相同点:
存储的数据格式一样,都是任意

不同点:
1、存储位置不同
2、存储的速度 不同
文件内部存储相对要快一点
3、较大的文件存到文件内部file,导致 应用非常大,一个应用apk本身有大小限制 ,现在100M。


.xml
<EditText
        android:id="@+id/et_file"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="27dp"
        android:layout_marginTop="16dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/et_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/et_file"
        android:layout_below="@+id/et_file"
        android:layout_marginTop="25dp"
        android:ems="10" />

    <Button
        android:onClick="save1"
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/et_content"
        android:layout_below="@+id/et_content"
        android:layout_marginTop="29dp"
        android:text="保存1" />

    <Button
        android:onClick="read1"
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignRight="@+id/et_content"
        android:text="读取1" />

    <Button
        android:onClick="save2"
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:text="保存2" />

    <Button
        android:onClick="read2"
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button3"
        android:layout_alignBottom="@+id/button3"
        android:layout_alignLeft="@+id/button2"

         android:layout_below="@+id/button2"
        android:text="读取2" />
.java
public class MainActivity extends ActionBarActivity {

    private EditText et_file;
    private EditText et_content;

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

        et_file = (EditText) findViewById(R.id.et_file);
        et_content = (EditText) findViewById(R.id.et_content);
    }

    /*
     * 保存在 sdcard 的路径1 /mnt/sdcard/文件
     */
    public void save1(View view) throws IOException {
        // 获取输入的文件名和文件内容
        String filename = et_file.getText().toString();
        String content = et_content.getText().toString();

        // 1.获取文件全路径
        // 获取外部存储设备的路径,不包含文件名
        File path = Environment.getExternalStorageDirectory();
        // 创建一个File对象 指向 指定文件的全路径,包含文件名
        File file = new File(path, filename);

        // 2.创建输出流对象
        FileOutputStream fos = new FileOutputStream(file);

        // 3.写入
        fos.write(content.getBytes());

        // 4.关闭流
        fos.close();
        //置空输入框
        et_file.setText(null);
        et_content.setText(null);

    }

    /*
     * 保存在 sdcard 的路径2
     */
    public void save2(View view) throws IOException {

        // 获取输入的文件名和文件内容
                String filename = et_file.getText().toString();
                String content = et_content.getText().toString();

                // 1.获取文件全路径
                // 获取外部存储设备的路径,不包含文件名
                File path = getExternalFilesDir(null);
                // 创建一个File对象 指向 指定文件的全路径,包含文件名
                File file = new File(path, filename);

                // 2.创建输出流对象
                FileOutputStream fos = new FileOutputStream(file);

                // 3.写入
                fos.write(content.getBytes());

                // 4.关闭流
                fos.close();
                //置空输入框
                et_file.setText(null);
                et_content.setText(null);

    }

    /*
     * 读取 sdcard 路径1的文件内容
     */
    public void read1(View view) throws IOException {

        // 获取输入的文件名和文件内容
        String filename = et_file.getText().toString();
        // 1.获取文件全路径
        // 获取外部存储设备的路径,不包含文件名
        File path = Environment.getExternalStorageDirectory();
        // 创建一个File对象 指向 指定文件的全路径,包含文件名
        File file = new File(path, filename);
        if ("".equals(filename)) {
            Toast.makeText(this, "文件未指定", 0).show();
            return;
        }

        if (!file.exists()) {
            Toast.makeText(this, "文件不存在", 0).show();
            et_file.setText(null);
            et_file.requestFocus();
            return;
        }


        //判断sdcard是否挂载

        if (Environment.getExternalStorageState().equals("mounted")) {//★★★★★★

            FileInputStream fis = new FileInputStream(file);
            String content = StreamUtils.streamToString(fis);

            et_content.setText(content);

        }




    }

    /*
     * 读取 sdcard 路径2的文件内容
     */
    public void read2(View view) throws IOException {
        // 获取输入的文件名和文件内容
        String filename = et_file.getText().toString();
        // 1.获取文件全路径
        // 获取外部存储设备的路径,不包含文件名
        File path = getExternalFilesDir(null);
        // 创建一个File对象 指向 指定文件的全路径,包含文件名
        File file = new File(path, filename);
        if ("".equals(filename)) {
            Toast.makeText(this, "文件未指定", 0).show();
            return;
        }

        if (!file.exists()) {
            Toast.makeText(this, "文件不存在", 0).show();
            et_file.setText(null);
            et_file.requestFocus();
            return;
        }


        //判断sdcard是否挂载

        if (Environment.getExternalStorageState().equals("mounted")) {//★★★★★★

            FileInputStream fis = new FileInputStream(file);
            String content = StreamUtils.streamToString(fis);

            et_content.setText(content);

        }

    }

}`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值