Android App将数据写入内部存储和外部存储的示例

File存储(内部存储)
一旦程序在设备安装后,data/data/包名/ 即为内部存储空间,对外保密。
Context提供了2个方法来打开输入、输出流

  • FileInputStream openFileInput(String name)
  • FileOutputStream openFileOutput(String name, int mode)
public class MainActivity extends Activity {

  private TextView show;
  private EditText et;
  private String filename = "test";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    show = (TextView) findViewById(R.id.show);
    et = (EditText) findViewById(R.id.et);

    findViewById(R.id.write).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        try {
          FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
          //FileOutputStream是字节流,如果是写文本的话,需要进一步把FileOutputStream包装 UTF-8是编码
          OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
          //写
          osw.write(et.getText().toString());
          osw.flush();
          fos.flush();
          osw.close();
          fos.close();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    });  

    findViewById(R.id.read).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        try {
          FileInputStream fis = openFileInput(filename);
          //当输入输出都指定字符集编码的时候,就不会出现乱码的情况
          InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
          //获取文件的可用长度,构建一个字符数组
          char[] input = new char[fis.available()];
          isr.read(input);
          isr.close();
          fis.close();
          String readed = new String(input);
          show.setText(readed);
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    });
  }
}

data/data/packagename/files/test就是我们写入的文件。

SD存储(外部存储)
mnt/sdcard 目录就是SD卡的挂载点(只是一个指向)。
storage/sdcard: 真正的SD卡操作目录。

一、文件下载
Android开发中,有时需要从网上下载一些资源以供用户使用,Android API中已经提供了很多直接可以用的类供大家使用,一般文件下载需要通过三个步骤:
1.创建一个HttpURLConnection对象

// 创建一个URL对象,该对象包含一个IP地址,urlStr指的是网络IP地址
url = new URL(urlStr);
// 通过URL对象,来创建一个HttpURLConnection对象
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

2.获得一个InputStream对象

InputStream input = urlConn.getInputStream();

3.设置访问网络的权限

//在AndroidManifest.xml配置文件中加入权限信息
<uses-permission android:name="android.permission.INTERNET"/>

二、访问并写入SD卡
1.判断手机上是否插入SD卡,且应用程序具有读写权限

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

2.得到当前SD卡的目录

Environment.getExternalStorageDirectory();

3.在访问SD卡前还必须在配置文件中设置权限,这样才可以最SD卡进行存取操作

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

以下是一个对SD操作经常用到的封装类,以后如果需要对SD卡操作,直接可以拿过来用

public class FileUtils {
  private String SDPATH;
  public String getSDPATH(){
    return SDPATH;
  }
  //构造函数,得到SD卡的目录,这行函数得到的目录名其实是叫"/SDCARD"
  public FileUtils() {
    SDPATH = Environment.getExternalStorageDirectory() +"/";
  }
  //在SD卡上创建文件
  public File createSDFile(String fileName) throws IOException{
    File file = new File(SDPATH + fileName);
    file.createNewFile();
    return file;
  }
  //在SD卡上创建目录
  public File createSDDir(String dirName){
    File dir = new File(SDPATH + dirName);
    dir.mkdir();
    return dir;
  }
  //判断SD卡上的文件夹是否存在
  public boolean isFileExist(String fileName){
    File file = new File(SDPATH + fileName);
    return file.exists();
  }

  //将一个InputStream里面的数据写入到SD卡中
  //将input写到path这个目录中的fileName文件上
  public File write2SDFromInput(String path, String fileName, InputStream input){
    File file = null;
    OutputStream output = null;
    try{
      createSDDir(path);
      file = createSDFile(path + fileName);
      //FileInputStream是读取数据,FileOutputStream是写入数据,写入到file这个文件上去
      output = new FileOutputStream(file);
      byte buffer [] = new byte[4 * 1024];
      while((input.read(buffer)) != -1){
        output.write(buffer);
      }
      output.flush();
    }
    catch(Exception e){
      e.printStackTrace();
    }
    finally{
      try{
        output.close();
      }
      catch(Exception e){
        e.printStackTrace();
      }
    }
    return file;
  }
}
(0)

相关推荐

  • Android 数据存储方式有哪几种

    以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

  • Android APP与媒体存储服务的交互

    简介:本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库.如何在多媒体应用中隐藏 APP 产生的文件.如何监听媒体数据库的变化等等.Android 原生有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.因此 APP 可以随时快速

  • Android编程实现手机自带内部存储路径的获取方法

    本文实例讲述了Android编程实现手机自带内部存储路径的获取方法.分享给大家供大家参考,具体如下: 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为2G). 我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看

  • android中使用SharedPreferences进行数据存储的操作方法

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是 j2se应用,我们会采用properties属性文件或者xml进行保存.如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android 平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用 SharedPrefe

  • Android应用开发SharedPreferences存储数据的使用方法

    SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对).SharedPreferences常用来存储一些轻量级的数据. 复制代码 代码如下: //实例化SharedPreferences对象(第一步) SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE);

  • Android调用相机并将照片存储到sd卡上实现方法

    Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可. 用Intent启动相机的代码: 复制代码 代码如下: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1);拍完照后就可以在onActivity

  • 在android开发中进行数据存储与访问的多种方式介绍

    数据存储与访问 很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: 文件 SharedPreferences SQLite数据库 内容提供者(Content provider) 网络 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 复制代码 代码如下: public clas

  • Android编程中的5种数据存储方式

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据      3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密

  • Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

  • Android学习之SharedPerference存储详解

    SharedPerference不同同于文件存储,它是使用键值的方式来存储数据,对于保存的每一条数据都会给一个键值,这样在读取数据时直接通过键值取出相应数据.amdroid提供了三个方法来获取实例: 1.Context类中的getSharePreferences()方法 它接收两个参数,第一个是文件名:第二个是操作模式,目前只有MODE_PRIVATE可选,这是默认的操作模式,表示只有当前的应用可以对文件进行操作. 2.Activity类中的getPreference()方法 它只接收一个操作模

随机推荐