数据存储——手机外部文件存储

一.特点

1.把文件存储在手机外部存储空间(SD卡)里

2.存储的是任意类型的文件

3.使用IO输入输出流操作文件

4.存放路径

①SD卡根目录/Android/date/包名/files/[文件类型目录]:应用卸载之后,数据同时被删除

②SD卡根目录/:应用卸载之后,数据不会同时被删除

5.需要声明权限

①写入文件android.permission.WRITE_EXTERNAL_STORAGE

②创建和删除文件MOUNT_UNMOUNT_FILESYSTEMS

二.API

1.Environment

①SD卡的工具类

②getExternalStorageState()  SD卡的状态 :Environment.MEDIA_MOUNTED  挂载状态

③getExternalStorageDirectory()  得到SD卡的根目录File实例

2.context.getExternalFilesDir(type)  得到包名的外部存储路径

type  文件类型目录

①null  表示不创建类型子目录

②会根据类型创建相应的子目录

 

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="com.hanqi.testapp3.MainActivity"
11     android:orientation="vertical">
12 <Button
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:text="写入外部存储文件"
16         android:onClick="bt6_OnClick"/>
17     <Button
18         android:layout_width="match_parent"
19         android:layout_height="wrap_content"
20         android:text="读外部存储文件"
21         android:onClick="bt7_OnClick"/>
22 
23 </LinearLayout>

 

  1 package com.hanqi.testapp3;
  2 
  3 import android.content.SharedPreferences;
  4 import android.content.res.AssetManager;
  5 import android.graphics.Bitmap;
  6 import android.graphics.BitmapFactory;
  7 import android.os.Bundle;
  8 import android.os.Environment;
  9 import android.support.v7.app.AppCompatActivity;
 10 import android.view.View;
 11 import android.widget.EditText;
 12 import android.widget.ImageView;
 13 import android.widget.TextView;
 14 import android.widget.Toast;
 15 
 16 import java.io.File;
 17 import java.io.FileInputStream;
 18 import java.io.FileOutputStream;
 19 import java.io.InputStream;
 20 import java.io.PrintStream;
 21 
 22 public class MainActivity extends AppCompatActivity {
 23 
 24     EditText et_1;
 25     TextView tv_1;
 26     ImageView iv_1;
 27 
 28     @Override
 29     protected void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.activity_main);
 32 
 33         et_1=(EditText)findViewById(R.id.et_1);
 34         tv_1=(TextView)findViewById(R.id.tv_1);
 35         iv_1=(ImageView)findViewById(R.id.iv_1);
 36     }
 37 
 38 
 39 //写入外部存储文件
 40     public void bt6_OnClick(View v)
 41     {
 42         //1.判断SD是否挂载
 43 
 44         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
 45         {
 46             //文本框内容
 47             String str=et_1.getText().toString();
 48 
 49             try {
 50                 //写入
 51                 //1.构造输出流
 52                 //1)得到文件路径
 53 
 54                 //得到SD卡根目录
 55                 String path=Environment.getExternalStorageDirectory().getCanonicalPath();
 56 
 57                 //得到包名对应的目录
 58                 //String path=getExternalFilesDir("Music").getCanonicalPath();
 59 
 60                 Toast.makeText(MainActivity.this, "path="+path, Toast.LENGTH_LONG).show();
 61 
 62                 //2)构造
 63                 FileOutputStream fos = new FileOutputStream(path+"/test.txt");
 64 
 65                 PrintStream ps=new PrintStream(fos);
 66 
 67                 ps.print(str);
 68 
 69                 ps.close();
 70                 fos.close();
 71 
 72                 Toast.makeText(MainActivity.this, "写入外部文件成功", Toast.LENGTH_SHORT).show();
 73             }
 74             catch (Exception ex)
 75             {
 76                 ex.printStackTrace();
 77                 Toast.makeText(MainActivity.this, "存储文件出错", Toast.LENGTH_SHORT).show();
 78             }
 79         }
 80         else
 81         {
 82             Toast.makeText(MainActivity.this, "SD卡没有挂载", Toast.LENGTH_SHORT).show();
 83         }
 84     }
 85 
 86     public void bt7_OnClick(View v)
 87     {
 88         //1.判断SD是否挂载
 89 
 90         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
 91         {
 92             try {
 93 
 94                 String path = getExternalFilesDir("Music").getCanonicalPath() + "/test.txt";
 95 
 96                 FileInputStream fis=new FileInputStream(path);
 97 
 98                 byte[]b=new byte[1024];
 99                 int i=0;
100 
101                 String str="";
102 
103                 while ((i=fis.read(b))>0)
104                 {
105                     str+=new String(b,0,i);
106                 }
107 
108                 fis.close();
109 
110                 Toast.makeText(MainActivity.this, "文件内容="+str, Toast.LENGTH_SHORT).show();
111             }
112             catch (Exception ex)
113             {
114                 Toast.makeText(MainActivity.this, "读取外部文件失败", Toast.LENGTH_SHORT).show();
115             }
116         }
117         else
118         {
119             Toast.makeText(MainActivity.this, "SD卡没有挂载", Toast.LENGTH_SHORT).show();
120         }
121     }
122 }

 

posted @ 2016-05-27 21:32  烟_雨_江_南  阅读(461)  评论(0编辑  收藏  举报