Android之旅-存儲技術(shù)之文件存儲

存儲技術(shù)


android 存儲技術(shù)有保存文件平斩,保存鍵值對(SharedPreferences),保存數(shù)據(jù)庫
本次介紹:文件存儲

存儲方式


android 存儲方式有內(nèi)部和外部瞭稼,外亦可以理解為SD卡忽洛,但是現(xiàn)在的大多數(shù)設(shè)置都不支持SD了,其實這個就等于硬盤非主分區(qū)一樣环肘。內(nèi)就是主分區(qū)欲虚,選擇在內(nèi)存儲的話,開發(fā)者必須謹慎悔雹,因為該分區(qū)空間有限复哆,緩存應(yīng)該選擇在放在外部存儲上欣喧。

技術(shù)準備


java IO

開始


寫文件篇:

內(nèi)部存儲:
可以通過下面方法獲得file的對應(yīng)的目錄

context.getCacheDir()   //返回當前應(yīng)用的內(nèi)部緩存目錄
context.getFilesDir()     //返回當前應(yīng)用的目錄
context.getDataDir()     //返回當前應(yīng)用的data目錄

也可以通過下面一個小例子(來自android官方)

String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;
try {  
       outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
       outputStream.write(string.getBytes());  
       outputStream.close();
} 
catch (Exception e) {  
     e.printStackTrace();
}

這是一個我的粒子

String filename ="SavaData";
String concent ="this is savaData demo"
FileOutputStream outputStream;

File file =new File(getApplicationContext().getFilesDir());
try {
     outputStream = new FileOutputStream(file.getpath());
     outputStream.write(content.getBytes());
     outputStream.close();
}
catch (Exception e) { 
     e.printStackTrace();
}

外部存儲:
使用外部存儲需要添加權(quán)限

<!-- 向SD卡中寫入數(shù)據(jù)權(quán)限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 讀取SD卡權(quán)限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

讀取外部存儲肯定少不了對SD的檢測 滑稽 謝謝android官方小例子

/* 檢查外部內(nèi)存是否能寫*/
    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    /* 檢查外部存儲是否能讀*/
    public boolean isExternalStorageReadable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state) ||
                Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            return true;
        }
        return false;
    }

廢話不多說馬上來寫外部SD卡例子,這個例子是寫普通文本為準梯找,寫其他文件也是如此续誉,就是傳入?yún)?shù)一致而已

public boolean saveFileToPath(String filename,String content) throws IOException {
        if(isExternalStorageReadable()&& isExternalStorageWritable()) {
            //新增一個在SD卡DataSave文件夾 
            File file = new File(Environment.getExternalStorageDirectory(),"DataSave");
            if (!file.exists()) {
                file.mkdir();
            }
            outputStream = new FileOutputStream(file.getPath() + "/" + filename);
            outputStream.write(content.getBytes());
            outputStream.close();
            return true;
        }
        else {
            return false;
        }
}

看完上面的小例子是不是覺得很像,沒錯初肉。這就是一通百通酷鸦!

讀寫篇:


好了,我們已經(jīng)知道如何寫一個文件牙咏,我們結(jié)合一下臼隔,我們來讀一個apk內(nèi)置文件寫入SD指定目錄。

 public boolean FileReadAndWrite() throws IOException {
        if (isExternalStorageReadable() && isExternalStorageWritable()) {

            File file = new File(Environment.getExternalStorageDirectory(), "DataSave");
            if(file.exists()){
                file.mkdir();
            }

            InputStream input = context.getResources().openRawResource(R.raw.ic_launcher);

            OutputStream output = new FileOutputStream(file.getPath()+"/test.png");

            byte[] data = new byte[input.available()];

            input.read(data);

            output.write(data);

            output.flush();
            //關(guān)閉io流
            output.close();
            input.close();
            return  true;
        }
        else {
            return  false;
        }

    }


}

番外篇


操作assets,raw,res目錄文件

assets
資源文件夾妄壶,在main下與res同級摔握,與res不同的是,該目錄下的資源文件在打包apk時丁寄,會按原格式一并被打包氨淌。

在assets下放一個test.html文件,加載該文件:

webview =(WebView)...(R.id.webview);
webview.loadUrl("file:///android_asset/webpage/index.html");

在assets讀取文件

InputStream inputStream = getResource().getAssets().open("test.txt");//不能打開文件夾

讀取列表伊磺、讀取圖片盛正、讀音樂,assets目錄下包含一個images目錄和一個mp3文件my.mp3屑埋,images目錄中包含一張圖片test.jpg:

String[] fileNames = getAssets().list("images/");//讀列表

InputStream inputStream = getAssets().open("images/test.jpg");//讀圖片
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);

MediaPlay player =new MediaPlay();
AssetFileDescriptor assetFileDescriptor = getAssets().openFd("my.mp3");//得到asset文件描述符
player.reset();
player.setDataResource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
player.prepare();
player.start();
android6.0新增權(quán)限問題

聊一聊Android 6.0的運行時權(quán)限

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豪筝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摘能,更是在濱河造成了極大的恐慌续崖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件团搞,死亡現(xiàn)場離奇詭異严望,居然都是意外死亡,警方通過查閱死者的電腦和手機逻恐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門像吻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梢莽,你說我怎么就攤上這事萧豆。” “怎么了昏名?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵涮雷,是天一觀的道長。 經(jīng)常有香客問我轻局,道長洪鸭,這世上最難降的妖魔是什么样刷? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮览爵,結(jié)果婚禮上置鼻,老公的妹妹穿的比我還像新娘。我一直安慰自己蜓竹,他們只是感情好箕母,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俱济,像睡著了一般嘶是。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛛碌,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天聂喇,我揣著相機與錄音,去河邊找鬼蔚携。 笑死希太,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酝蜒。 我是一名探鬼主播誊辉,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秕硝!你這毒婦竟也來了芥映?” 一聲冷哼從身側(cè)響起洲尊,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤远豺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坞嘀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躯护,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年丽涩,在試婚紗的時候發(fā)現(xiàn)自己被綠了棺滞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡矢渊,死狀恐怖继准,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矮男,我是刑警寧澤移必,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毡鉴,受9級特大地震影響崔泵,放射性物質(zhì)發(fā)生泄漏秒赤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一憎瘸、第九天 我趴在偏房一處隱蔽的房頂上張望入篮。 院中可真熱鬧,春花似錦幌甘、人聲如沸潮售。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲做。三九已至,卻和暖如春遏弱,著一層夾襖步出監(jiān)牢的瞬間盆均,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工漱逸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泪姨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓饰抒,卻偏偏與公主長得像肮砾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袋坑,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容