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

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;
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, sd卡
, 内部存储
外部存储
内部存储和外部存储、内部存储 外部存储、oracle 存储过程 示例、mysql 存储过程 示例、vertica存储过程示例,以便于您获取更多的相关知识。

时间: 2024-08-20 02:48:08

Android App将数据写入内部存储和外部存储的示例_Android的相关文章

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

Android编程仿Iphone拖动相片特效Gallery的简单应用示例_Android

本文实例讲述了Android编程仿Iphone拖动相片特效Gallery的简单应用.分享给大家供大家参考,具体如下: Step 1:准备图片素材. 将icon2,icon3,icon4,icon5,icon6五张图片导入res/drawable里加上icon.png本身一共有6张图片. Step 2:新建Android工程,命名为GalleryDemo. Step 3:设计UI,修改main.xml代码如下: <?xml version="1.0" encoding="

android使用handler ui线程和子线程通讯更新ui示例_Android

复制代码 代码如下: package com.act262.sockettx; import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import and

Android基于widget组件实现物体移动/控件拖动功能示例_Android

本文实例讲述了Android基于widget组件实现物体移动/控件拖动功能.分享给大家供大家参考,具体如下: package com.sky; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickLi

Android编程下拉菜单spinner用法小结(附2则示例)_Android

本文较为详细的总结分析了Android编程下拉菜单spinner用法.分享给大家供大家参考,具体如下: Spinner控件也是一种列表类型的控件,它的继承关系如下: java.lang.Object    ↳ android.view.View      ↳ android.view.ViewGroup        ↳ android.widget.AdapterView<Textends android.widget.Adapter>          ↳ android.widget.A

Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例_Android

本文实例讲述了Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用.分享给大家供大家参考,具体如下: 现在我们上网几乎都会用百度或者谷歌搜索信息,当我们在输入框里输入一两个字后,就会自动提示我们想要的信息,这种效果在Android 里是如何实现的呢? 事实上,Android 的AutoCompleteTextView Widget ,只要搭配ArrayAdapter 就能设计同类似Google 搜索提示的效果. 本例子先在Layout 当中布局一个AutoCom

Android App开发中HTTP扩展包OkHttp的入门使用指南_Android

Android 开发,不可避免的会用到网络技术,而多数情况下,我们都是使用 HTTP 协议来发送和接收网络数据.Android 系统主要提供两种方式来进行 HTTP 通信,HttpURLConnection 和 HttpClient,但是从 Android 2.3 及以后版本中,Google 推荐使用 HttpURLConnection,究其原因,就是由于 HttpClient 的 API 数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前 Android 团队在提升和优化

Android应用中利用ViewPager实现多页面滑动切换效果示例_Android

1.添加android support包因为上面的几个类都是在android support包中才提供,我们先添加包. 在Eclipse->Window->Android SDK Manager,选择列表中Extras->Android Support Library进行安装.下载完后在android-sdk\extras\android\support目录下,这里我们选择v4版本,进入v4目录,拷贝其中的android-support-v4.jar文件到工程的libs目录(若没有新建)

Android ListView长按弹出菜单二种实现方式示例_Android

复制代码 代码如下: /** * 知识点1:ListView item:两种长按弹出菜单方式* 知识点2:ListView SimpleAdapter的使用* 知识点 3:在java代码中创建一个ListView*/ public class ListOnLongClickActivity extends Activity {         private LinearLayout myListViewlayout;         private ListView mListView;