zoukankan      html  css  js  c++  java
  • 数据存储——手机外部文件存储

    一.特点

    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 }

  • 相关阅读:
    div中子div在firefox ie 水平居中对齐
    Access数据库自定义连接字符串(详细有图百度文档)
    ASP页面乱码
    国内开源asp.netCMS汇总
    sql 2005
    卡巴斯基授权key导入方式方法及其导入key基本原理
    关于SqlServer服务无法启动的症状分析和解决方法
    js下流媒体的在线播放
    用JS+vml作三维报表
    了解嵌入式数据库(sqlite,firebird)
  • 原文地址:https://www.cnblogs.com/cycanfly/p/5536098.html
Copyright © 2011-2022 走看看