欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中使用SDcard读取文件

程序员文章站 2024-02-22 09:27:58
平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用file进行存储(使用file操作进行存储);由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在sd...

平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用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值,判断外部设置是否可以移除

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<textview
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<edittext
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用sdcard写操作" />
<edittext
android:id="@+id/et2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用sdcard读操作" />
</linearlayout> 

package com.example.yanlei.yh;

import android.os.bundle;
import android.os.environment;
import android.support.v7.app.appcompatactivity;
import android.view.menu;
import android.view.menuitem;
import android.widget.textview;
import org.apache.http.util.encodingutils;
import java.io.bufferedreader;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.inputstreamreader;
import java.util.arraylist;
import java.util.list;
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 mainactivity extends appcompatactivity {
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.activity_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(mainactivity.this, "写入文件成功",
toast.length_long).show();
} catch (exception e) {
toast.maketext(mainactivity.this, "写入文件失败",
toast.length_short).show();
}
} else {
// 此时sdcard不存在或者不能进行读写操作的
toast.maketext(mainactivity.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(mainactivity.this, "读取文件成功",
toast.length_long).show();
} catch (exception e) {
toast.maketext(mainactivity.this, "读取失败",
toast.length_short).show();
}
} else {
// 此时sdcard不存在或者不能进行读写操作的
toast.maketext(mainactivity.this,
"此时sdcard不存在或者不能进行读写操作", toast.length_short).show();
}
break;
}
}
}
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.menu_main, menu);
return true;
}
@override
public boolean onoptionsitemselected(menuitem item) {
// handle action bar item clicks here. the action bar will
// automatically handle clicks on the home/up button, so long
// as you specify a parent activity in androidmanifest.xml.
int id = item.getitemid();
//noinspection simplifiableifstatement
if (id == r.id.action_settings) {
return true;
}
return super.onoptionsitemselected(item);
}
}

以上所述给大家介绍了android中使用sdcard读取文件,希望对大家有所帮助!