Android 使用SDcard进行文件的读取

平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储);由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了一下在android进行sdcard的存储使用方法;

首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置:

在AndroidManifest.xml中加入访问SDCard的权限如下:

  <!-- 在SDCard中创建与删除文件权限 -->
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  <!-- 往SDCard写入数据权限 -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   

接着我们在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法

  1: getDataDirectory()  获取到Androi中的data数据目录
   2:getDownloadCacheDirectory()  获取到下载的缓存目录
   3:getExternalStorageDirectory()  获取到外部存储的目录 一般指SDcard
  4:getExternalStorageState() 获取外部设置的当前状态 一般指SDcard, 

android系统中对于外部设置的状态,我们比较常用的应该是 MEDIA_MOUNTED(SDcard存在并且可以进行读写)  MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以进行读操作)  当然还有其他的一些状态,可以在文档中进行查找到

  5:getRootDirectory()  获取到Android Root路径
   6:isExternalStorageEmulated() 返回Boolean值判断外部设置是否有效
   7:isExternalStorageRemovable()  返回Boolean值,判断外部设置是否可以移除

【注】上面进行红色标记的方法,我们会常用

<span style="color:#ff0000;">Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)  代码中这句:我们对SDcard的状态进行判断,</span>

下面看实现SDCard进行文件读写操作的Demo:

package com.jiangqq.sdcard;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SDcardActivity extends Activity {
    private Button bt1, bt2;
    private EditText et1, et2;

    private static final String FILENAME = "temp_file.txt";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt1 = (Button) this.findViewById(R.id.bt1);
        bt2 = (Button) this.findViewById(R.id.bt2);
        et1 = (EditText) this.findViewById(R.id.et1);
        et2 = (EditText) this.findViewById(R.id.et2);
        bt1.setOnClickListener(new MySetOnClickListener());
        bt2.setOnClickListener(new MySetOnClickListener());
    }

    private class MySetOnClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            File file = new File(Environment.getExternalStorageDirectory(),
                    FILENAME);
            switch (v.getId()) {
            case R.id.bt1:// 使用SDcard写操作
                if (Environment.getExternalStorageState().equals(
                        Environment.MEDIA_MOUNTED)) {

                    try {
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(et1.getText().toString().getBytes());
                        fos.close();
                        Toast.makeText(SDcardActivity.this, "写入文件成功",
                                Toast.LENGTH_LONG).show();
                    } catch (Exception e) {
                        Toast.makeText(SDcardActivity.this, "写入文件失败",
                                Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // 此时SDcard不存在或者不能进行读写操作的
                    Toast.makeText(SDcardActivity.this,
                            "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();
                }
                break;

            case R.id.bt2:// 使用SDcard读操作
                if (Environment.getExternalStorageState().equals(
                        Environment.MEDIA_MOUNTED)) {
                    try {
                        FileInputStream inputStream = new FileInputStream(file);
                        byte[] b = new byte[inputStream.available()];
                        inputStream.read(b);
                        et2.setText(new String(b));
                        Toast.makeText(SDcardActivity.this, "读取文件成功",
                                Toast.LENGTH_LONG).show();
                    } catch (Exception e) {
                        Toast.makeText(SDcardActivity.this, "读取失败",
                                Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // 此时SDcard不存在或者不能进行读写操作的
                    Toast.makeText(SDcardActivity.this,
                            "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();
                }
                break;
            }

        }

    }

}

下面截图效果:

Demo下载链接这里

时间: 2024-10-06 16:54:11

Android 使用SDcard进行文件的读取的相关文章

SDcard进行文件的读取

平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储):由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了一下在android进行sdcard的存储使用方法; 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!-- 在SDCard中创建与删除文件权限 --

android txt文件读写(读取资源文件,读取私有和SD文件的方法)

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.http.util.EncodingUtils; import android.app.Activity; public class FileAccess { /** * 一.私有文件夹下的文件存取(/data/data/包名/files) * * @param fileNam

Android开发之文件保存读取

Android中文件保存读取可选择在手机本身存储.外存储如SD卡中进行,本文将依次介绍. 1.在手机本身存储保存.读取文件. 布局文件如下:     效果图如下: 在文件名框中填写保存时的文件名,文件内容框填写保存内容,点击保存后即可实现保存至手机本身存储. .java代码如下: MainActivity.java 此处的getApplicationContex()方法(生命周期是整个应用,用MainActivity.this代替时表示获取的是该Activity的上下文,生命周期为该Activi

android中XMl文件的读取

废话不多说了直接上代码: 新建一个Xml文件用于读取: test.xml <Languages cat="1"> <lan id="1"> <name>java</name> <ide>Eclipse</ide> </lan> <lan id="2"> <name>Swift</name> <ide>Xcode<

Android 开发中eclipse 下 DDMS 视图中 sdcard 中文件导入的处理

首先需要说明下,这里说的sdcard的权限并不是指在Android application程序中设置sdcard的权限读 取问题.而是指在DDMS看到的目录下的那个sdcard目录的权限问题.       有时候,当你想在sdcard目录下面导入某个文件时,突然发现sdcard目录没有权限,它的权限状态为( d-------即000).这时候我们需要做的事:1.如果你没有配置好adb运行环境,在环境配置的path下面将 android-sdk-windows\platform-tools路劲添加

【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,并且在AVD中浏览sdcard的文件

首先,实现这一切的大前提是,你的AVD安卓模拟器,在启动之前,有设置好sdcard的大小,如下图.同时,你的AVD安卓模拟器,要处于启动状态.否则无法执行如下的操作. 这里以<[Android]利用adt-bundle在Windows下轻松搭建Android开发环境与Hello world>(点击打开链接)在Windows中安装出来的安卓开发环境为例. 一.把外部文件拷贝的AVD安卓模拟器上的sdcard上 1.在AVD成功开机之后,你先要通过Window->Open Persperct

android 从assets和res中读取文件(转)

1. 相关文件夹介绍 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件.在后面会介绍如何读取assets文件夹的资源! res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容): 目录Directory 资源类型Resource Types res/anim/ XML文件,它们被编译进逐帧动画

Android 的assets文件资源与raw文件资源读取

res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename:assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类. 2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 *读取文件资源: 1

android 从assets和res中读取文件

11. assets文件夹资源的访问 assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件. 1. 先在Activity里面调用getAssets()来获取AssetManager引用. 2. 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream. 3. 然后就是用已经open file 的inputStream读取文件,读取