Android實(shí)現(xiàn)讀寫SD卡
SD卡的讀寫是我們?cè)陂_發(fā)Android 應(yīng)用程序過(guò)程中最常見的操作。下面介紹SD卡的讀寫操作方式:
1. 獲取SD卡的根目錄
String sdCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();
2. 在SD卡上創(chuàng)建文件夾目錄
/**
* 在SD卡上創(chuàng)建目錄
*/
public File createDirOnSDCard(String dir)
{
File dirFile = new File(sdCardRoot + File.separator + dir +File.separator);
Log.v("createDirOnSDCard", sdCardRoot + File.separator + dir +File.separator);
dirFile.mkdirs();
return dirFile;
}
3. 在SD卡上創(chuàng)建文件
/**
* 在SD卡上創(chuàng)建文件
*/
public File createFileOnSDCard(String fileName, String dir) throws IOException
{
File file = new File(sdCardRoot + File.separator + dir + File.separator + fileName);
Log.v("createFileOnSDCard", sdCardRoot + File.separator + dir + File.separator + fileName);
file.createNewFile();
return file;
}
4.判斷文件是否存在于SD卡的某個(gè)目錄
/**
* 判斷SD卡上文件是否存在
*/
public boolean isFileExist(String fileName, String path)
{
File file = new File(sdCardRoot + path + File.separator + fileName);
return file.exists();
}
5.將數(shù)據(jù)寫入到SD卡指定目錄文件
/* 寫入數(shù)據(jù)到SD卡中
*/
public File writeData2SDCard(String path, String fileName, InputStream data)
{
File file = null;
OutputStream output = null;
try {
createDirOnSDCard(path); //創(chuàng)建目錄
file = createFileOnSDCard(fileName, path); //創(chuàng)建文件
output = new FileOutputStream(file);
byte buffer[] = new byte[2*1024]; //每次寫2K數(shù)據(jù)
int temp;
while((temp = data.read(buffer)) != -1 )
{
output.write(buffer,0,temp);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
output.close(); //關(guān)閉數(shù)據(jù)流操作
} catch (Exception e2) {
e2.printStackTrace();
}
}
return file;
}
注意事項(xiàng)
對(duì)SD卡的操作,必須要申請(qǐng)權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
詳情看這里 http://www.dbjr.com.cn/article/34296.htm
注意:不直接進(jìn)行讀出是為了防止打文件操作對(duì)內(nèi)存的消耗,所以用輸入流讀到硬盤上。
public String readFile(String fileName) throws Exception{
FileInputStream fis = context.openFileInput(fileName);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
fis.close();
return new String(bytes,"utf-8");
}
當(dāng)文件很大的時(shí)候,byte[]會(huì)占用很大的內(nèi)存。
package cn.itcast.fileio.service;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.os.Environment;
public class SdCardService {
private Context ctx;
public SdCardService(Context ctx) {
this.ctx = ctx;
}
/**
* 寫文件入skcard
*/
public void writeToSdCard(String fileName, String cont) {
try {
// 判斷是否有掛載sdcard
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 得到sdcar文件目錄
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir, "itcast.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(cont.getBytes());
fos.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 讀SdCard中的文件
*/
public String readSdCard(String fileName) {
try {
// 判斷是否有掛載sdcard
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 得到sdcar文件目錄
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir, "itcast.txt");
FileInputStream fis = new FileInputStream(file);
return readIs2String(fis);
}
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 將輸入流數(shù)據(jù)讀取到輸出流當(dāng)中
*/
private OutputStream readIs2Os(InputStream is ,OutputStream os){
try {
byte[] bytes = new byte[1024];
int length = 0 ;
while((length = is.read(bytes)) != -1){
os.write(bytes, 0, length);
}
is.close();
os.close();
}
catch (IOException e) {
e.printStackTrace();
}
return os ;
}
/**
* 將輸入流數(shù)據(jù)讀取到輸出流當(dāng)中
*/
public byte[] readIs2Bytes(InputStream is){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
readIs2Os(is,baos);
return baos.toByteArray() ;
}
public String readIs2String(InputStream is){
try {
return new String(readIs2Bytes(is),"utf-8");
}
catch (Exception e) {
e.printStackTrace();
}
return null ;
}
public String readIs2String(String fileName){
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir,fileName);
FileInputStream is = new FileInputStream(file);
return readIs2String(is);
}
}
catch (Exception e) {
e.printStackTrace();
}
return null ;
}
}
- Android數(shù)據(jù)持久化之I/O操作詳解
- Android數(shù)據(jù)持久化之File機(jī)制分析
- Android數(shù)據(jù)持久化之Preferences機(jī)制詳解
- 詳解Android開發(fā)數(shù)據(jù)持久化之文件存儲(chǔ)(附源碼)
- Android仿QQ好友列表分組實(shí)現(xiàn)增刪改及持久化
- Android持久化技術(shù)之SharedPreferences存儲(chǔ)實(shí)例詳解
- Android持久化技術(shù)之文件的讀取與寫入實(shí)例詳解
- android讀寫sd卡操作寫入數(shù)據(jù)讀取數(shù)據(jù)示例
- Android編程之在SD卡上進(jìn)行文件讀寫操作實(shí)例詳解
- android 手機(jī)SD卡讀寫操作(以txt文本為例)實(shí)現(xiàn)步驟
- Android數(shù)據(jù)持久化之讀寫SD卡中內(nèi)容的方法詳解
相關(guān)文章
利用Kotlin Tools如何快速添加Kotlin依賴詳解
這篇文章主要給大家介紹了關(guān)于利用Kotlin Tools如何快速添加Kotlin依賴的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示效果
這篇文章主要介紹了Android studio listview實(shí)現(xiàn)列表數(shù)據(jù)顯示 數(shù)據(jù)循環(huán)顯示功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Android 自定義view之畫圖板實(shí)現(xiàn)方法
本文重在對(duì)自定義view,以及其常用類,常用方法的初步了解,提供一個(gè)思路,效果是其次,畫板只是例子,需要的朋友可以參考下2018-01-01
使用flutter的showModalBottomSheet遇到的坑及解決
這篇文章主要介紹了使用flutter的showModalBottomSheet遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
DrawerLayout結(jié)合Tollbar實(shí)現(xiàn)菜單側(cè)滑效果
這篇文章主要為大家詳細(xì)介紹了DrawerLayout結(jié)合Tollbar實(shí)現(xiàn)菜單側(cè)滑效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
簡(jiǎn)單了解Android性能優(yōu)化方向及相關(guān)工具
這篇文章主要介紹了簡(jiǎn)單了解Android性能優(yōu)化方向及相關(guān)工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Android實(shí)現(xiàn)dialog的3D翻轉(zhuǎn)示例
這篇文章主要介紹了Android實(shí)現(xiàn)dialog的3D翻轉(zhuǎn)示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08
Android 通過(guò)httppost上傳文本文件到服務(wù)器的實(shí)例代碼
這篇文章主要介紹了Android 通過(guò)httppost上傳文本文件到服務(wù)器的實(shí)例代碼,非常簡(jiǎn)單易懂,非常實(shí)用,需要的朋友可以參考下2016-08-08

