Android中使用SDcard讀取文件
平時(shí)我們需要在手機(jī)上面存儲(chǔ)想音頻,視頻等等的大文件,以前學(xué)過使用File進(jìn)行存儲(chǔ)(使用File操作進(jìn)行存儲(chǔ));由于考慮到手機(jī)本身的存儲(chǔ)空間小,這時(shí)候我們需要把文件存儲(chǔ)在SDcard中,今天自己也學(xué)習(xí)了一下在android進(jìn)行sdcard的存儲(chǔ)使用方法;
首先如果要在程序中使用sdcard進(jìn)行存儲(chǔ),我們必須要在AndroidManifset.xml文件進(jìn)行下面的權(quán)限設(shè)置:
在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:
<!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
接著我們?cè)谑褂肧Dcard進(jìn)行讀寫的時(shí)候 會(huì)用到Environment類下面的幾個(gè)靜態(tài)方法
1: getDataDirectory() 獲取到Androi中的data數(shù)據(jù)目錄
2:getDownloadCacheDirectory() 獲取到下載的緩存目錄
3:getExternalStorageDirectory() 獲取到外部存儲(chǔ)的目錄 一般指SDcard
4:getExternalStorageState() 獲取外部設(shè)置的當(dāng)前狀態(tài) 一般指SDcard,
android系統(tǒng)中對(duì)于外部設(shè)置的狀態(tài),我們比較常用的應(yīng)該是 MEDIA_MOUNTED(SDcard存在并且可以進(jìn)行讀寫) MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以進(jìn)行讀操作) 當(dāng)然還有其他的一些狀態(tài),可以在文檔中進(jìn)行查找到
5:getRootDirectory() 獲取到Android Root路徑
6:isExternalStorageEmulated() 返回Boolean值判斷外部設(shè)置是否有效
7:isExternalStorageRemovable() 返回Boolean值,判斷外部設(shè)置是否可以移除
<?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 {
// 此時(shí)SDcard不存在或者不能進(jìn)行讀寫操作的
Toast.makeText(MainActivity.this,
"此時(shí)SDcard不存在或者不能進(jìn)行讀寫操作", 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 {
// 此時(shí)SDcard不存在或者不能進(jìn)行讀寫操作的
Toast.makeText(MainActivity.this,
"此時(shí)SDcard不存在或者不能進(jìn)行讀寫操作", 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讀取文件,希望對(duì)大家有所幫助!
- Android獲取SD卡路徑及SDCard內(nèi)存的方法
- android讀取sdcard路徑下的文件的方法
- 獲取android4.0版本sdcard路徑示例
- Android實(shí)現(xiàn)把文件存放在SDCard的方法
- android中把文件保存到sdcard代碼實(shí)例
- Android編程獲取sdcard卡信息的方法
- Android實(shí)現(xiàn)獲取SD卡總?cè)萘?,可用大小,機(jī)身內(nèi)存總?cè)萘考翱捎么笮〉姆椒?/a>
- Android獲取設(shè)備CPU核數(shù)、時(shí)鐘頻率以及內(nèi)存大小的方法
- Android編程實(shí)現(xiàn)獲得內(nèi)存剩余大小與總大小的方法
- android開發(fā)教程之用命令啟動(dòng)android模擬器并設(shè)置其內(nèi)存大小
- Android開發(fā)實(shí)現(xiàn)的獲取sdcard大小及內(nèi)存大小工具類
相關(guān)文章
Android自定義控件實(shí)現(xiàn)簡單寫字板功能
這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)簡單寫字板功能的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android RecyclerView的焦點(diǎn)記憶封裝
這篇文章主要介紹了Android RecyclerView的焦點(diǎn)記憶封裝,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Android向node.js編寫的服務(wù)器發(fā)送數(shù)據(jù)并接收請(qǐng)求
這篇文章主要為大家詳細(xì)介紹了Android向node.js編寫的服務(wù)器發(fā)送數(shù)據(jù),并接收請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android實(shí)現(xiàn)計(jì)步進(jìn)度的環(huán)形Progress
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)計(jì)步進(jìn)度的環(huán)形Progress,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Flutter禁止手機(jī)橫屏的簡單實(shí)現(xiàn)方法
app默認(rèn)是可以橫屏的,如果需要禁止橫屏話可以參考這篇文章,本文主要給大家介紹了關(guān)于Flutter禁止手機(jī)橫屏的簡單實(shí)現(xiàn)方法,需要的朋友可以參考下2021-07-07
Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service
Android應(yīng)用程序的四大組件中Activity、BroadcastReceiver、ContentProvider、Service都可以進(jìn)行跨進(jìn)程,Android系統(tǒng)采用了遠(yuǎn)程過程調(diào)用(RPC)方式來實(shí)現(xiàn)跨進(jìn)程調(diào)用服務(wù)(Service),對(duì)于Service的跨進(jìn)程調(diào)用需要通過AIDL來實(shí)現(xiàn),關(guān)于如何實(shí)現(xiàn)aidl service請(qǐng)看本文介紹2015-10-10
Android中Dialog對(duì)話框的使用小結(jié)
這篇文章主要給大家總結(jié)了一些關(guān)于Android中Dialog對(duì)話框的使用方法,這其中包括普通對(duì)話框、確定取消對(duì)話框、多按鈕對(duì)話框、列表對(duì)話框、帶Adapter的對(duì)話框、單選對(duì)話框以及多選對(duì)話框等,需要的朋友可以參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹吧。2017-04-04

