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

Posted 安然罒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据存储——手机外部文件存储相关的知识,希望对你有一定的参考价值。

一.特点

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

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

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

   4.文件路径

     1-SD卡根目录/android/data/包名/files/[ 文件类型],应用卸载后,数据同时被删除;

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

   5.需要声明权限

     1-android.permission.WRITE_EXTERNAL_STORAGE,写入文件;

     2-MOUNT_UNMOUNT_FILESYSTEMS,创建和删除文件。

二.API

   1.Environment

      1-SD卡的工具类

      2-getExternalStorageState()  得到SD卡的状态,Environment.MEDIA_MOUNTED  挂载状态。

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

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

      type  文件类型目录:

       1-null  表示不创建类型子目录

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

 

手机外部内存存储代码展示:

 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 
13     <EditText
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:hint="输入..."
17         android:id="@+id/et_1"/>
18 
19     <Button
20         android:layout_width="match_parent"
21         android:layout_height="wrap_content"
22         android:text="写入外部存储文件"
23         android:onClick="bt6_OnClick"/>
24 
25     <Button
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:text="读取外部存储文件"
29         android:onClick="bt7_OnClick"/>
30 
31 
32 </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.Environment;
  8 import android.support.v7.app.AppCompatActivity;
  9 import android.os.Bundle;
 10 import android.text.BidiFormatter;
 11 import android.view.View;
 12 import android.widget.EditText;
 13 import android.widget.ImageView;
 14 import android.widget.TextView;
 15 import android.widget.Toast;
 16 
 17 import java.io.File;
 18 import java.io.FileInputStream;
 19 import java.io.FileOutputStream;
 20 import java.io.InputStream;
 21 import java.io.PrintStream;
 22 
 23 
 24 public class MainActivity extends AppCompatActivity {
 25 
 26     TextView tv_1;
 27     EditText et_1;
 28     ImageView iv_1;
 29 
 30     @Override
 31     protected void onCreate(Bundle savedInstanceState) {
 32         super.onCreate(savedInstanceState);
 33         setContentView(R.layout.activity_main);
 34 
 35         et_1=(EditText)findViewById(R.id.et_1);
 36 
 37     }
 38 
 39 
 40     //写入外部存储文件
 41     public  void bt6_OnClick(View v)
 42     {
 43         //1.判断SD卡是否挂载
 44 
 45         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
 46         {
 47             //文本框内容
 48             String str=et_1.getText().toString();
 49 
 50             try {
 51                 //写入
 52                 //1.构造输出流
 53                 //1)得到文件路径
 54 
 55                 //得到SD卡根目录
 56                 //String path=Environment.getExternalStorageDirectory().getCanonicalPath();
 57 
 58                 //得到包名对应的目录
 59                 String path=getExternalFilesDir("Music").getAbsolutePath();
 60 
 61                 Toast.makeText(MainActivity.this, "path="+path, Toast.LENGTH_LONG).show();
 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 e)
 75             {
 76                 e.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 e)
113             {
114 
115                 Toast.makeText(MainActivity.this, "读取外部文件失败", Toast.LENGTH_SHORT).show();
116             }
117         }
118         else
119         {
120             Toast.makeText(MainActivity.this, "SD卡没有挂载", Toast.LENGTH_SHORT).show();
121         }
122     }
123 }
手机外部存储.java

 

以上是关于数据存储——手机外部文件存储的主要内容,如果未能解决你的问题,请参考以下文章

安卓的存储机制

手机外部文件存储(SD卡存储)

将位图从片段保存到内部/外部存储[关闭]

Android14.2 外部文件存储和读取

手机内部存储外部存储

从外部存储中检索 Relay 查询片段的变量